Capturing 'self' strongly in this block is likely to lead to a retain cycle

来源:互联网 发布:2012服务器端口怎么开 编辑:程序博客网 时间:2024/05/16 09:54

摘自:http://zhidao.baidu.com/link?url=YSVX3-ulNsH1pUQihP6cv67BfJ9qpjtmpFBO89VcArAhPCCAdgf6yhFO881LfEJvuEFfdutzS01Fu8-_d8A_X10PzBuYiqZWjYqxPlMxr_3

block 是代码块的意思。
甲里引用乙,乙里引用甲,就会导致 “retain cycle” -- “形成怪圈”的错误。
网上资料:
解决的办法是 创建一个本地变量 指向 自己(self).
例如:_items 实际上是 self->items,
_block 对象在创建的时候会被retain一次
改成:
__block ViewController *blockSelf = self;
_block = ^{
[blockSelf->_items addObject:@"Hello!"];
};
就可以了。
-------------------

DoSomethingManager *manager = [[DoSomethingManager alloc] init];  

manager.complete = ^{  

//...complete actions  

[manager otherAction];  

manager.complete = nil; // Objective-C 用这种方法破坏怪圈。

[manager release];  

};  
-------------

0 0
原创粉丝点击