不使用ARC时替换__weak

Ser*_*nce 4 cocoa-touch nsoperationqueue ios objective-c-blocks retain-cycle

我有这行代码:

__weak NSBlockOperation *weakOperation = operation;
Run Code Online (Sandbox Code Playgroud)

这是触发此编译器错误:

__weak attribute cannot be specified on automatic variable.
Run Code Online (Sandbox Code Playgroud)

原因是我没有启用ARC(尚未准备好进行切换).所以从另一个StackOverFlow问题,我被建议使用:

__unsafe_unretained NSBlockOperation *weakOperation = operation; 
Run Code Online (Sandbox Code Playgroud)

这使得错误消失,但对于我正在使用它的上下文,它不起作用(如果感兴趣,请参阅此问题:如何取消NSOperationQueue).

所以我的问题是,__weak在这个实例中我可以用关键字代替什么来摆脱这个警告?当我使用时__weak,一切都能正常工作,但我担心它不会影响iOS的未来版本.

s.b*_*ara 7

您不应该担心iOS的未来版本,因为__weak编译器在为您生成代码时会解释这些内容.

看看你的另一篇文章告诉我,你的目标是避免weakOperation被保留,尽管从块内引用.在特定情况下,如果你不使用ARC,可以更换__weak__block,表明你的变量应拍摄时,可保留.

需要注意的是影响__blockretain行为是ARC和手动之间不同的挽留计数.