我来自于大量面向 JavaScript 的背景,我正在尽我所能过渡到 Objective-C。自然地,我总是发现自己抓住机会在我的源代码中使用闭包函数,例如:
@property (nonatomic, retain) void (^zoomCallback)(NSInteger width, NSInteger height, NSString *url);
但是,每次我将它记入 Xcode 时,它都会警告我:
保留的块属性不会复制块 - 改为使用复制属性
我的理解是,由于 ARC,您不再需要在 Objective-C 中手动保留内容,所以我承认这个警告让我很生气。我假设它指的是我的闭包函数,所以据我所知,它告诉我分配这个变量:
myObject.zoomCallback = someMethod;
还会导致 someMethod 被保留,从而 someMethod 的所有者继续存在吗?我做对了吗?
这有什么负面影响?如果我“复制”该块,它是否允许破坏 someMethod 的所有者,因此在任何时候我提到“self”时,在闭包方法本身内它将不再存在?除非我的闭包方法正在做一些非常琐碎的事情或不引用成员变量或方法的事情,否则我不是几乎总是想要保留该块吗?