【发布时间】:2010-08-12 23:43:12
【问题描述】:
我试图跟踪一个内存分配错误,所以我覆盖了我的类的保留和释放方法。我注意到,当将此类的一个实例分配给另一个类的属性时,对象的保留计数增加了,但我重新定义的保留从未被调用。
这怎么可能? (保留)属性是否保留对象而不调用保留?
【问题讨论】:
标签: objective-c iphone properties retain retaincount
我试图跟踪一个内存分配错误,所以我覆盖了我的类的保留和释放方法。我注意到,当将此类的一个实例分配给另一个类的属性时,对象的保留计数增加了,但我重新定义的保留从未被调用。
这怎么可能? (保留)属性是否保留对象而不调用保留?
【问题讨论】:
标签: objective-c iphone properties retain retaincount
在我的机器中,被覆盖的 retain 被调用。 (我使用的是 10.6.4。我在 GCC 4.2.1 和 clang 1.5 上都检查了这个。)
你能发布你的代码吗?
在内部,retain 属性的综合设置器使用objc_setProperty,其源代码可在here 获得。
如您所见,当属性使用retain 时,它最终会调用[newObject retain]。
【讨论】:
垃圾回收是否开启?我不相信retain 在 GC 下被调用。
【讨论】:
如果你不使用 self (self.yourproperty),它不会增加保留计数。
【讨论】:
如果合成属性会修改保留计数而不调用保留或释放,我不会感到惊讶。
【讨论】: