【发布时间】:2012-05-29 10:12:47
【问题描述】:
通常weak 引用用于避免应用程序对象图中的保留循环。我理解那部分。现在我想更进一步,了解它们在后台是如何工作的。
搜索了一下,我读到当我使用__weak 限定符时,与该限定符关联的变量已在自动释放池中注册,但这意味着什么?为什么对象在池中注册?使用什么类型的池?是主池还是其他特别创建的池?
当我使用这段代码时:
id _weak myWeakObj = [[NSObject alloc] init];
编译器给了我一个可以修复的警告:
id _strong myStrongObj = [[NSObject alloc] init];
id _weak myWeakObj = myStrongObj;
那么,基于上一个问题,myStrongObj 引用的对象会发生什么?如果可能的话,我想知道编译器的代码是什么样子的?
【问题讨论】:
-
实际的中间(ARC 后)步骤并不能真正用作源代码。您必须查看汇编程序才能看到插入的保留和释放。不过,这是一个很好的问题!
-
你在哪里读过关于自动释放池和 __weak 的信息?事实并非如此。基本上都是由 Objective-C 运行时处理的。我将尽快制定一个简洁的答案......
-
@JacquesCousteau 感谢您支持和修复标题。如何在汇编程序中查看保留和释放?谢谢。
标签: objective-c memory-management automatic-ref-counting weak-references