【发布时间】:2017-08-22 09:21:00
【问题描述】:
好的,我们知道如果我们这样做,我们可能会有一个保留周期
[someObject messageWithBlock:^{ [self doSomething]; }];
解决方案是这样的
__weak typeof(self) weakSelf = self;
[someObject messageWithBlock:^{ [weakSelf doSomething]; }];
但是如果我们执行最后一段代码但是 doSomething 有很多对 self 的引用呢?喜欢:
- (void) doSomething {
self.myProperty = @"abc";
[self doOtherThing];
}
这会创建一个保留周期吗?
然后呢:
__weak typeof(self) weakSelf = self;
[someObject messageWithBlock:^{
self.onError(NSLocalizedStringFromTable(@"Error", MY_TABLE, nil))
}];
MY_TABLE 是#define?
【问题讨论】:
-
当我们有超过 2 个对象引用时,会创建保留循环。当超出范围时,ARC 会减少保留计数。但是,如果我们有超过 1 个对象的强引用,则会发生保留循环。 (i) 要删除保留循环,请始终采用对象的弱引用,特别是在块的情况下。因为块创建对象的单独副本我喜欢你所做的:__weak typeof(self)weakSelf = self; [someObject messageWithBlock:^{ [weakSelf doSomething]; }]; (ii) 对于功能没有任何问题
-
请将此评论作为答案,以便我接受。谢谢
-
我认为函数只是一种占位符代码,所以参考你的
weak self不会有问题 -
谢谢,我已经添加了答案
标签: ios objective-c iphone automatic-ref-counting