我的应用程序中有以下调用:
dispatch_async(dispatch_get_main_queue(), ^{
self.emptyView.hidden = [self.recordsData count];
[self finishedRefreshing];
});
Run Code Online (Sandbox Code Playgroud)
这使我相信,因为我们正在访问一个ivar,所以会创建一个保留周期.但是因为我没有看到在自我内部捕获的块我觉得我没事.这让我相信我们已经过度使用弱自身模式,因为我们的典型惯例是永远不会将块作为ivar实际分配.我仍然觉得我错过了一些东西,有没有其他方法可以创建一个保留周期而无需将块分配给自己?我不知道为什么我很难掌握这个概念,但任何好的阅读资料也都很受欢迎.
当人们担心保留周期时,"周期"部分似乎确实被忽视了.在您的代码中,块由GCD管理,您的对象不拥有它,因此没有保留周期.
我们一直在使用弱自己的模式
似乎很多人都认为"aargh!Blocks!make a weakSelf"!
保留周期发生在块拥有的对象(因此,对对象或其中一个ivars的强引用)本身拥有块时(因此块被复制到属性或ivar).
典型的情况是,您创建了一个对象,例如具有完成处理程序块的自定义警报视图,并且在块中您对对象本身执行某些操作(例如,从其超级视图中删除视图).
| 归档时间: |
|
| 查看次数: |
439 次 |
| 最近记录: |