我变得有点偏执,并且有可能创造一个保留周期。我正在使用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";
}
答案 0 :(得分:8)
没有。 -someInstanceMethod
不是一个块。你从一个人那里调用它的事实是无关紧要的。 仅引用 块本身可能会导致保留,并且因为您在块中的唯一引用是__weak
变量,所以你没事。
顺便说一下,如果你真的想要放松一下,你应该修改基于块的UIAlertView
类,以便在视图被解除时丢弃所有块。这样,即使您创建了保留周期,一旦警报视图消失,它将自动中断。