好的,我了解如何通过块来避免 self
引用环,那么如果在调用堆栈更深层次的块中从方法发送消息给 self
时该怎么办呢:
- (void)methodA {
__block MyClass *blockSelf = self;
[someObject block:^{
[blockSelf methodB];
}];
}
- (void)methodB {
...
[self methodC];
...
}
- (void)methodC {
}
在这种情况下,
[blockSelf methodB]
是可以的,但是从 methodB
中发送 [self methodC]
是否会导致循环引用呢?无法在任何地方找到答案...
someObject
是什么以及它是否保留了传递给它的块。如果self
保留了someObject
(比如它是实例变量),并且如果someObject
存储并保留传递给block:
的块,那么就会有一个保留环。 - newacct