Wis*_*erd 5 objective-c objective-c-blocks retain-cycle
我在一个块中引用self并且没有创建保留周期时遇到了一些麻烦.
如果我的理解是正确的,你能告诉我吗?
如果我在一个块中引用self,它将创建一个保留周期,而我应该在块外部创建一个弱引用,然后在块内使用该弱引用?
谢谢!
Ric*_*III 11
是的,这是正确的,但有一些例外:
保留周期仅在self最终间接保留块时发生,例如myblock在以下属性上设置属性self myproperty:
self.myproperty.myblock = ^{ [self dosomething]; }; // ERROR: Retain Cycle
Run Code Online (Sandbox Code Playgroud)
但是,当使用块作为调度代码之类的东西时,通常不会发生保留周期,如下所示:
dispatch_async(dispatch_get_main_queue(), ^{ [self dosomething]; }); // Safe, dispatch_async will not be retained by you
Run Code Online (Sandbox Code Playgroud)
当然,除非您dispatch_async在具有保留周期标准的块内调用该函数.
这真的令人困惑,这是我希望得到修复的东西.现在,我个人认为:
并非总是如此,在ARC之前的代码中,这不是问题,但由于块现在自动保留它们捕获的任何对象,因此这是一个问题.
我希望这会得到修复,因为它是一个非常简单的修复,因为它self的类型是一个__weak instancetype const而不是一个instancetype const.它还将解决在ARC中创建类集群的一些问题,这无疑是最大的问题,但它仍然存在.
就保留周期的优势而言,并不多.
| 归档时间: |
|
| 查看次数: |
3168 次 |
| 最近记录: |