【问题标题】:Objective C: @property(retain) doesn't call retain?目标C:@property(retain) 不调用retain?
【发布时间】:2010-08-12 23:43:12
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c iphone properties retain retaincount


    【解决方案1】:

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

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

    【讨论】:

    • 稍后我将尝试发布一个简单的示例,因为我注意到此行为的代码是大型应用程序的一部分。我忘了提到这是在 iPhone 应用程序上,使用 3.2 SDK。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 正确,如果你给 iVar 赋值 _someVar = a;然后忽略属性中的内存管理令牌。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        • 1970-01-01
        • 2015-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多