我正在使用 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/

10-12 02:34