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

时间:2012-06-29 21:39:36

标签: ios ios5 automatic-ref-counting objective-c-blocks

我变得有点偏执,并且有可能创造一个保留周期。我正在使用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";
}

1 个答案:

答案 0 :(得分:8)

没有。 -someInstanceMethod不是一个块。你从一个人那里调用它的事实是无关紧要的。 引用 块本身可能会导致保留,并且因为您在块中的唯一引用是__weak变量,所以你没事。

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