0

我试图跟踪一个内存分配错误,所以我覆盖了我的类的保留和释放方法。我注意到,当将此类的一个实例分配给另一个类的属性时,对象的保留计数增加了,但我重新定义的保留从未被调用。

这怎么可能?(保留)属性是否保留对象而不调用保留?

4

4 回答 4

3

retain在我的机器中,调用了覆盖。(我使用的是 10.6.4。我在 GCC 4.2.1 和 clang 1.5 上都检查了这个。)你能发布你的代码吗?

在内部,属性的综合设置器retain使用objc_setProperty,其源代码可在此处获得。如您所见,最终它会[newObject retain]在属性使用时调用retain.

于 2010-08-13T00:45:34.030 回答
0

垃圾收集是否开启?我不相信retain在 GC 下被调用。

于 2010-08-13T01:00:54.350 回答
0

如果你不使用 self ( self.yourproperty ),它不会增加保留计数。

于 2012-07-16T23:52:31.293 回答
-1

如果合成属性会在不调用保留或释放的情况下修改保留计数,我不会感到惊讶。

于 2010-08-12T23:51:48.353 回答