通常使用weak
引用来避免应用程序对象图中的保留周期。我明白那一部分。现在我想更进一步,了解它们是如何工作的。
搜索了一下,我读过当我使用__weak
限定符时,与该限定符关联的变量在自动释放池中注册,但这是什么意思?为什么对象在池中注册?使用什么类型的游泳池?它是主池还是其他一些专门创建的池?
当我使用此代码时:
id _weak myWeakObj = [[NSObject alloc] init];
编译器给了我一个警告,我可以修复:
id _strong myStrongObj = [[NSObject alloc] init];
id _weak myWeakObj = myStrongObj;
那么,基于上一个问题,myStrongObj
引用的对象会发生什么?如果可能的话,我想知道编译器的代码是什么样的?
答案 0 :(得分:5)
以下是你的朋友:
还有Objective-C运行时的源代码:
特别要看一下:
如果按照第一个链接的说法查看objc_initWeak
和objc_destroyWeak
,那么你会看到它是如何工作的“引擎盖下”。胆量在weak_register_no_lock
用于注册弱引用,而在weak_unregister_no_lock
用于取消注册弱引用。
我会让你通过并查看有关实际的工作方式的所有错综复杂信息: - )。