关于iOS块和保留周期的偏执狂

bgo*_*son 2 ios objective-c-blocks ios5 automatic-ref-counting

我已成为一个有块的偏执狂和创建保留周期的可能性.我正在使用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";
}
Run Code Online (Sandbox Code Playgroud)

Lil*_*ard 8

-someInstanceMethod不是块.你从一个人那里调用它的事实是无关紧要的.只有内部的引用本身才能导致保留,并且因为块中的唯一引用是__weak变量,所以你没问题.

顺便说一下,如果你真的想要放松一下,你应该修改你的基于块的UIAlertView类,以便在视图被解除时丢弃所有块.这样,即使您创建了保留周期,一旦警报视图消失,它将自动中断.