Way*_*man 4 functional-programming memory-management objective-c objective-c-blocks
我正在使用Objective-C中的块,并且没有真正找到一个很好的解释为什么一个块,如果你要将它分配给一个实例变量,必须分配,copy而不是assign?
例如:
typedef void (^MyBlock)();
@interface SomeClass : NSObject
{
MyBlock myblock;
// Other ivars
}
@property (nonatomic, copy) MyBlock myblock; // Why must this be 'copy'???
// other declarations
@end
Run Code Online (Sandbox Code Playgroud)
好吧,让我们分析一下:
假设您在某个方法中创建了一个块,将其分配给某个变量:
MyBlock block = ^{};
Run Code Online (Sandbox Code Playgroud)
然后你只需将它分配给一个属性assign:
self.myblock = block;
Run Code Online (Sandbox Code Playgroud)
当contains方法返回时,该block变量将超出范围并取消分配.因此,考虑到这一点,您必须copy使用块对象,然后将其存储在实例变量中.这样,您可以拥有包含对象生命周期的块.
| 归档时间: |
|
| 查看次数: |
2728 次 |
| 最近记录: |