何时在块中引用自我保留周期?

时间:2014-02-26 17:10:43

标签: ios objective-c automatic-ref-counting objective-c-blocks

我遇到的问题可能很常见。在ARC环境中,需要引用self的块会比self更活跃。我知道在块中使用__weak typeof(self) weakSelf = self;以避免保留周期的约定。问题是我们确实需要保持自我。所以我的问题是:什么时候在块中引用self会创建一个保留周期? This post帖子表明,在动画块中,对自我的引用是可以的。

我也考虑过如下解决方案,但我不确定它会改变什么:

__block typeof(self) blockSelf = self;

[someObj someMethodTakingCallback:^{
    //do some stuff
    blockSelf = nil;
 }];  

2 个答案:

答案 0 :(得分:3)

如果self除了保留“self”的块之外还保留了块,则会得到一个引用周期。

答案 1 :(得分:0)

在这种情况下,如果self拥有对someObj的引用,则会有一个保留周期,因为someObj可能持有对self的引用。如果从self到someObj有任何保留参考路径,它实际上是一个保留周期。

相关问题