所以,我知道如果你在self
内部保存一个块,然后访问该块内的self
,你需要创建和使用__weak id weakSelf = self;
之类的东西。
我的问题是,这是否也扩展到从该块调用的函数?如下所示,以下内容会导致保留周期:
self.block = ^{ [weakSelf myFunction]; }
- (void) myFunction { self.counter++; }
感谢您的时间!
答案 0 :(得分:2)
这不会创建保留周期,因为方法中的self
实际上是Objective C运行时传递的参数(使用objc_msgSend
等)。因此,让我们在您的代码示例中考虑两种可能的方案。由于保留对象的释放,weakSelf
已被清零 - 传递给nil
的消息将被忽略。 weakSelf
未归零,在这种情况下,它由Objective C运行时作为其self
参数传递给消息。