我正在使用 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
最佳答案
好吧,让我们分析一下:
假设您在某个方法中创建了一个块,并将其分配给某个变量:
MyBlock block = ^{};
然后你只需将它分配给一个带有
assign
的属性:self.myblock = block;
当包含方法返回时,
block
变量将超出范围并被释放。因此,考虑到这一点,您必须对块对象进行 copy
,然后将其存储在您的实例变量中。这样,您就可以在包含对象的生命周期内拥有该块。关于objective-c - 为什么 objc 块的赋值必须是 'copy' ,而不是 'assign' ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4664804/