Jim*_*mmy 4 objective-c grand-central-dispatch objective-c-blocks
在许多关于如何使用块和GCD的指南中,总是提到一个提示:不要在块中保留self.
细节是在定义一个块时,如果你引用self或者我自己的ivar,那么block会保留self.因此,解决方法是使用__block修饰符来获取weakSelf或weakIvar.
但是不这样做有什么害处呢?如果块保留自我,它应该在块完成时释放自我(我是否正确?).因此,最终自我的参考计数是平衡的.我知道如果自我保留了块并且块保留了自身,那么它将是一个保留周期.块和self都将被解除分配.但是如果使用GCD,自我不保留块,为什么不让块保留自己?
保留自我没有害处,除非阻挡留在身边.如果您正在使用GCD执行块然后将其删除,那么这很好.如果self有一个对它保持的块的引用(即self.someBlock = ^{self.x = 2;}),这只是一个问题,因为那时你有一个保留周期.
我个人喜欢在GCD中保留self(如果使用)的块,因为你无法真正控制块何时执行且无法取消,因此如果不保留self,则可以在取消分配后执行.
| 归档时间: |
|
| 查看次数: |
1308 次 |
| 最近记录: |