【发布时间】:2011-09-27 08:06:25
【问题描述】:
在许多关于如何使用块和 GCD 的指南中,总是提到一个提示:不要在块中保留 self。
细节是在定义块时,如果引用self或self的ivar,则self被块保留。所以解决方法是使用__block 修饰符来获得weakSelf 或weakIvar。
但是不这样做有什么害处呢?如果块保留自我,它应该在块完成时释放自我(我对这个是正确的吗?)。所以最终 self 的引用计数是平衡的。我知道如果 self 保留块并且块保留 self,这将是一个保留循环。块和 self 都不会被释放。但是如果使用GCD,self不保留block,为什么不让block保留self呢?
【问题讨论】:
标签: objective-c objective-c-blocks grand-central-dispatch