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