目标C:@property(保留)不调用retain?

时间:2010-08-12 23:43:12

标签: objective-c iphone properties retain retaincount

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

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

4 个答案:

答案 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的情况下修改保留计数,我不会感到惊讶。