对象是否有指向它的指针?

时间:2012-11-02 04:59:35

标签: objective-c xcode4.5

在ARC中,释放对象时,指针设置为nil。

对象如何告诉所有这些点即将被释放?

这适用于强指针还是所有类型的指针?

2 个答案:

答案 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。

由此我得出结论,运行时维护了当前指向给定对象的每个弱指针的集合。当该对象被释放时,它会将指针归零。

因此,每个对象都有一个列表,指向创建双向连接的相关指针。存储的方式和位置不明确 - 它可以通过现有的对象关联机制,它可以是一个全局字典,它可以是几乎任何东西。