2012-06-29 37 views
2

我已經變得有點偏執,有塊和創建保留週期的可能性。我正在使用UIAlertView類的基於塊的版本,它允許您使用塊而不是委託方法。我使用了很多這些Alertviews,所以我通常會調用實例方法來做很多繁重的工作。關於iOS塊和保留週期的偏執狂

我在方法someInstanceMethod中做的分配是否會導致保留週期?
(我使用內存管理ARC)

__weak id weakSelf = self; 
[doWorkAndThen:^{ 
    [weakSelf someInstanceMethod]; 
}]; 

-(void) someInstanceMethod{ 
    //will either of the assignments below cause a retain cycle? 
    self.iVar = @"data"; 
    [self setIvar:@"data"; 
} 

回答

8

-someInstanceMethod不是塊。你從一個人打電話的事實是無關緊要的。 只有參考裏面該塊本身可以導致保留,並且由於您的塊中唯一的引用是一個__weak變量,你很好。順便說一句,如果你真的想要放鬆自己的想法,你應該修改基於區塊的UIAlertView類,以便在視圖被解散時丟棄所有的塊。這種方式即使您創建了保留週期,只要警報視圖消失,它就會自動中斷。

+0

謝謝Kevin!我現在對塊的感覺好多了! – bgolson