我遇到的问题可能很常见。在ARC环境中,需要引用self的块会比self更活跃。我知道在块中使用__weak typeof(self) weakSelf = self;
以避免保留周期的约定。问题是我们确实需要保持自我。所以我的问题是:什么时候在块中引用self会创建一个保留周期? This post帖子表明,在动画块中,对自我的引用是可以的。
我也考虑过如下解决方案,但我不确定它会改变什么:
__block typeof(self) blockSelf = self;
[someObj someMethodTakingCallback:^{
//do some stuff
blockSelf = nil;
}];
答案 0 :(得分:3)
如果self
除了保留“self”的块之外还保留了块,则会得到一个引用周期。
答案 1 :(得分:0)
在这种情况下,如果self拥有对someObj的引用,则会有一个保留周期,因为someObj可能持有对self的引用。如果从self到someObj有任何保留参考路径,它实际上是一个保留周期。