块中方法 运行 中对自身的强引用

Strong reference to self inside a method running from a block

所以,我知道如果你在 self 中保存一个块,然后在该块中访问 self,你需要创建和使用类似 __weak id weakSelf = self; 的东西。

我的问题是,这是否也扩展到从该块调用的函数?如,以下是否会导致保留周期:

self.block = ^{ [weakSelf myFunction]; }
- (void) myFunction { self.counter++; }

感谢您的宝贵时间!

这不会创建保留循环,因为方法中的self实际上是Objective C运行时传递的参数(使用objc_msgSend等)。因此,让我们考虑您的代码示例中可能出现的两种情况。由于持有对象的释放,weakSelf 已被清零 - 传递给 nil 的消息被忽略。 weakSelf 未归零,在这种情况下,它由 Objective C 运行时作为其 self 参数传递给消息。