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