Does object need (a) `__block` modifier or (b) weak reference, when accessed from within a block in Objective-C?
在Objective - C的(7)
但使用与对象分到的情况是不好的,操作系统的解释。苹果公司说,"这里是指参考自强"或"强"的标准是可变的。然后,在尽头的页面说:苹果
To override this behavior for a particular object variable, you can mark it with the __block storage type modifier.
是什么意思"重写这个行为"?
那是一个进一步的complicating事情谈制作在线栈溢出时调用对象从一个弱参考在一块。
我不想建立一个对象。我只是想修改一个对象的状态,从现有的在一块。我相信在被称为是一个同步块,在相同的线程。
想象一下:
1 2 3 4 5 6 7 8 9 10 11 12 | Clicker* myClicker = [[Clicker alloc] init] ; … // Declare a block. void (^myBlock)( ); // Populate the block. myBlock = ^ void ( ) { [myClicker click] ; // Updating some state in that object, such as incrementing a counter number or adding an element to a collection. }; // Call `myBlock` synchronously (same thread) from some other code. … // … invokes `myBlock` repeatedly … |
我的问题:
-
那应该怎么改性剂是与
__block 代码? -
那应该怎么改性与弱引用的代码是什么?
-
另一问题是适用于对象的状态,从中一块?
您引用了一些过时的块编程主题,其中说:
To override this behavior for a particular object variable, you can mark it with the
__block storage type modifier.
该文件可追溯到人工参考计数的日期,早在ARC之前。在手动引用计数代码中,可以使用
但这种行为随着ARC的变化而改变,如过渡到ARC发行说明中所述。我们现在在不希望建立对块中引用的对象的强引用的情况下使用
所以,继续使用
首先,对于所有类型的变量(原始变量、对象指针变量和所有其他变量),
因此,如果不使用
注意,对象状态的变化与变量的赋值无关。您可以通过在指向对象的指针上调用一个可变方法来改变对象的状态,也可以使用
您正在阅读的关于强引用和"重写此行为"的部分只与MRC下块的内存管理行为的单独问题有关。根据MRC,在ARC中没有变量是
在ARC中,一个块是强捕获变量还是弱捕获变量取决于捕获的变量是