2

我对块和创建保留周期的可能性变得有点偏执。我正在使用UIAlertView该类的基于块的版本,它允许您使用块而不是委托方法。我使用了很多这样的 Alertviews,所以我经常调用实例方法来做很多繁重的工作。

我在方法中所做的分配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";
}
4

1 回答 1

8

-someInstanceMethod不是块。你从一个人那里调用它的事实是无关紧要的。只有块本身内部的引用才会导致保留,并且由于块内的唯一引用是一个__weak变量,所以你很好。

顺便说一句,如果您真的想放松心情,您应该修改基于块的UIAlertView类,以便在视图关闭时丢弃所有块。这样,即使您确实创建了保留周期,它也会在警报视图消失后自动中断。

于 2012-06-29T21:45:04.663 回答