避免在块内捕获自我的常见模式是在块外创建一个弱自我,并使用它在块内创建一个“局部强”版本的自我(内在自我)。
__weak ClassX *weakSelf = self;
[someOtherObject methodThatTakesCOmpletionBlock: ^{
ClassX innserSelf = weakSelf; //innserSelf creation?
[someObject send:innerSelf.prop;}];
执行该行时会发生什么innserSelf creation
?发送方法时是否是selfinnerSelf
的副本?methodThatTakesCompletionBlock:
someOtherObject
这个问题只关注执行 innserSelf 行时会发生什么。我已经看到对块内的弱引用的强引用,它是相关的,但没有解决这一点。