Capturing self strongly in this block is likely to lead to retain cycle
答案:1 悬赏:40 手机版
解决时间 2021-04-13 06:18
- 提问者网友:几叶到寒
- 2021-04-12 11:59
Capturing self strongly in this block is likely to lead to retain cycle
最佳答案
- 五星知识达人网友:思契十里
- 2021-04-12 12:23
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];
};
-------------
甲里引用乙,乙里引用甲,就会导致 “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];
};
-------------
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯