在 ARC 中,当一个对象被释放时,指针被设置为 nil。
该对象如何告诉所有这些点它即将被释放?
这适用于强指针还是所有类型的指针?
在 ARC(或 MRC)中,释放对象时指针不会设置为 nil。在 ARC 中,weak
对象引用被设置为nil
对象被释放时,而不是被释放时。这里有很大的不同。
基于对需要添加到 Objective-C 运行时的 ARC的一些快速阅读,弱引用本身已向运行时注册。有很多电话要求建立弱连接,将其拆除并重新分配。编译器决定执行哪种类型的赋值,就像它在自动保留和释放方面也有作用。根据链接的文档:
运行时跟踪包含非空值的 __weak 对象。直接修改运行时正在跟踪的 __weak 对象是未定义的行为,除非通过 objc_storeWeak、objc_destroyWeak 或 objc_moveWeak 调用。
由此我得出结论,运行时维护当前指向给定对象的每个弱指针的集合。当该对象被释放时,它会将指针清零。
因此,每个对象都有一个指向相关指针的列表,以创建双向连接。存储的方式和位置并不明确——它可以通过现有的对象关联机制,它可以是一个全局字典,它几乎可以是任何东西。