9
好了,我明白如何避免self
保持與塊週期,怎麼樣的情況下,當我發送消息到自由的方法在調用堆棧嵌套更深這樣的塊中:塊和從調用的方法自
- (void)methodA {
__block MyClass *blockSelf = self;
[someObject block:^{
[blockSelf methodB];
}];
}
- (void)methodB {
...
[self methodC];
...
}
- (void)methodC {
}
在這種情況下[blockSelf methodB]
是好的,但發送[self methodC]
從methodB
導致保留週期與否?在任何地方找不到答案...
很酷,謝謝!這將從我的幫手方法中刪除一堆醜陋的「參數攻擊」...... – Tom
「這裏沒有保留週期。」那麼這取決於someObject是什麼,以及它是否保留傳遞給它的塊。如果'self'保留了'someObject'(比如它是一個實例變量),並且'someObject'存儲並保留了傳遞給'block:'的塊,那麼就會有一個保留週期。 – newacct