【问题标题】:Paranoid about iOS Blocks and Retain Cycles对 iOS 阻塞和保留周期的偏执
【发布时间】:2012-07-01 10:19:15
【问题描述】:

我对块和创建保留循环的可能性变得有点偏执。我正在使用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";
}

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢凯文!我现在对积木感觉好多了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 2013-09-04
    • 2013-10-17
    • 1970-01-01
    • 2011-12-07
    • 2013-11-21
    相关资源
    最近更新 更多