Lor*_*o B 3 memory-management weak-references objective-c automatic-ref-counting
通常,weak
引用用于避免应用程序对象图中的保留周期.我明白那一部分.现在我想更进一步,了解它们是如何在引擎盖下工作的.
搜索一下,我读过当我使用__weak
限定符时,与该限定符关联的变量在自动释放池中注册,但这是什么意思?为什么对象在池中注册?使用什么类型的游泳池?它是主池还是其他一些特制的?
当我使用这段代码时:
id _weak myWeakObj = [[NSObject alloc] init];
Run Code Online (Sandbox Code Playgroud)
编译器给了我一个警告,我可以修复:
id _strong myStrongObj = [[NSObject alloc] init];
id _weak myWeakObj = myStrongObj;
Run Code Online (Sandbox Code Playgroud)
那么,基于前一个问题,引用的对象会发生什么myStrongObj
?如果可能的话,我想知道编译器的代码是什么样的?
以下是你的朋友:
还有Objective-C运行时的源代码:
特别要看一下:
如果你看一下objc_initWeak
,并objc_destroyWeak
按照有关1号联系洽谈,然后你会看到它是如何工作的"引擎盖下".胆量weak_register_no_lock
用于注册弱引用,weak_unregister_no_lock
用于取消注册弱引用.
我会把它留给你去看看它实际上如何工作的所有复杂性:-).
归档时间: |
|
查看次数: |
1013 次 |
最近记录: |