我以为我理解 self 在复制的块中的用法是no no。
但是为了清理我的代码,我在 Xcode 中启用了一堆警告,一个叫做“向弱指针发送消息”
所以现在在我所有的块中,每次我使用我创建的weakself
参考__weak typeof(self) weakself = self;
我收到这个警告:Weak receiver may be unpredictably set to nil
一个简单的例子:
__weak typeof(self) weakself = self;
[aClass doSomethingInABlock:^{
[weakself doSomething]; //warning.
}];
我已经看到了在块中定义 self 版本的答案,如下所示:
__weak typeof(self) weakself = self;
[aClass doSomethingInABlock:^{
typeof(self) selfref = weakself;
[selfref doSomething]; //no warning.
}];
所以我想知道这里实际发生了什么:
- 我只是在欺骗编译器吗?
- 强引用对弱引用有什么作用?
- 我还缺少什么。
谢谢。