【问题标题】:What's the harm of retain self in block?(Objective-C, GCD)在块中保留自我有什么害处?(Objective-C,GCD)
【发布时间】:2011-09-27 08:06:25
【问题描述】:

在许多关于如何使用块和 GCD 的指南中,总是提到一个提示:不要在块中保留 self。

细节是在定义块时,如果引用self或self的ivar,则self被块保留。所以解决方法是使用__block 修饰符来获得weakSelfweakIvar

但是不这样做有什么害处呢?如果块保留自我,它应该在块完成时释放自我(我对这个是正确的吗?)。所以最终 self 的引用计数是平衡的。我知道如果 self 保留块并且块保留 self,这将是一个保留循环。块和 self 都不会被释放。但是如果使用GCD,self不保留block,为什么不让block保留self呢?

【问题讨论】:

    标签: objective-c objective-c-blocks grand-central-dispatch


    【解决方案1】:

    除非方块留在附近,否则保留自我并没有什么坏处。如果您使用 GCD 执行该块,然后将其删除,那很好。如果 self 引用了它保留的块(即self.someBlock = ^{self.x = 2;}),这只是一个问题,因为那时你有一个保留周期。

    我个人喜欢在 GCD 中保留 self(如果使用)的块,因为您无法真正控制块执行的时间并且不能取消它,因此如果不保留它,它可能会在 self 被释放后执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      相关资源
      最近更新 更多