我不确定对象的内存地址在其生命周期内是否保持不变。可以?或者在对象存在期间它有时会改变吗?
答案 0 :(得分:5)
是的,任何给定对象的地址在Objective-C中是不变的。这一点非常重要,因为对象总是由地址引用。 :-)(垃圾收集器可以移动并更新所有指针,但iPhone上不支持垃圾收集,Mac Obj-C垃圾收集器记录不这样做 - 请参阅Garbage Collection Programming Guide: Architecture,在垃圾收集器的工作原理下。)
答案 1 :(得分:0)
如果您的意思是self
,那么,是的,它在对象的生命周期内保持不变。
答案 2 :(得分:-1)
虽然我没有深入了解此事,但我的意见如下:
对象的内存地址可能不是静态的。
例如,在Java中,对象没有指针而是引用,JVM可能会在对象中移动,作为其内存管理方案的一部分,并且可能会根据移动的对象更改引用值。 此外,对象可能会作为JVM的垃圾收集过程的一部分移动。
虽然我没有阅读任何关于此的官方文档,如果您遇到相同的问题,可以在此处发布。
同样的过程可能发生在.Net。
答案 3 :(得分:-1)
在“可可垃圾收集编程指南”中,我没有看到阿鲁曼在上面确定对象地址是保证永久性的完美保证:
封闭与开放系统部分:
'[在一个开放的垃圾收集系统中,收集器]重新分配和复制内存块并更新每个引用指针以反映新地址。 [...] 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
然后有一个可怕的主题......多线程(啊)。