对象的内存地址在其生命周期内是否保持不变?

时间:2009-08-11 17:12:06

标签: iphone cocoa-touch uikit

我不确定对象的内存地址在其生命周期内是否保持不变。可以?或者在对象存在期间它有时会改变吗?

4 个答案:

答案 0 :(得分:5)

是的,任何给定对象的地址在Objective-C中是不变的。这一点非常重要,因为对象总是由地址引用。 :-)(垃圾收集器可以移动并更新所有指针,但iPhone上不支持垃圾收集,Mac Obj-C垃圾收集器记录不这样做 - 请参阅Garbage Collection Programming Guide: Architecture,在垃圾收集器的工作原理下。)

答案 1 :(得分:0)

如果您的意思是self,那么,是的,它在对象的生命周期内保持不变。

答案 2 :(得分:-1)

虽然我没有深入了解此事,但我的意见如下:

对象的内存地址可能不是静态的。

例如,在Java中,对象没有指针而是引用,JVM可能会在对象中移动,作为其内存管理方案的一部分,并且可能会根据移动的对象更改引用值。 此外,对象可能会作为JVM的垃圾收集过程的一部分移动。

虽然我没有阅读任何关于此的官方文档,如果您遇到相同的问题,可以在此处发布。

同样的过程可能发生在.Net。

答案 3 :(得分:-1)

在“可可垃圾收集编程指南”中,我没有看到阿鲁曼在上面确定对象地址是保证永久性的完美保证:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/GarbageCollection/Articles/gcArchitecture.html

封闭与开放系统部分:

'[在一个开放的垃圾收集系统中,收集器]重新分配和复制内存块并更新每个引用指针以反映新地址。 [...] Cocoa的垃圾收集器在“关闭”和“打开”之间取得平衡,通过轻松跟踪“外部”引用,确切地知道扫描块指针的位置,并且仅在必须的地方“保守” 。“

由于Cocoa运行时的一般“动态”特性,我希望在Apple文档中对该主题进行真正明确的讨论,即使对于非垃圾收集程序也是如此。在搜索整个developer.apple.com时,我找不到任何关于“对象的内存地址保证不会改变”的声明 - 尝试使用Google:

site:developer.apple.com cocoa "object's memory address" OR "memory address of an object" guaranteed OR permanent

然后有一个可怕的主题......多线程(啊)。