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