【问题标题】:Should I dealloc @property items?我应该处理 @property 项目吗?
【发布时间】:2010-10-03 22:07:20
【问题描述】:

我一直遵循的基本规则是“如果我分配,我就解除分配”,但这是一个过于简单的观点吗?

【问题讨论】:

标签: objective-c cocoa


【解决方案1】:

规则是“如果您调用以newalloc 开头、称为retain 或包含copy 的方法,则必须(自动)release”。 (容易记住这是首字母缩略词:“NARC”)

如果您将@property 声明为(retain)(copy),那么您应对支持的对象负责,并且您必须这样做:

[myProperty release];

在您的 dealloc 方法中。

【讨论】:

  • @jeff 现代运行时会合成 ivars,这意味着即使您从未声明过 ivar,您仍然可以直接在代码中使用它。 :)
  • @Dave - 我认为最后一条评论让我感到震惊。我开始使用这种行为进行编码,直到最近才考虑到它。 (正在合成的ivars)在离开Obj-c一段时间后,我习惯于给实例变量一个不同的首字母。谢谢。
  • 嗯,据我所知,合成的 ivars 需要通过“->”运算符访问,这对 Cocoa 程序员来说是不自然的。即,[self->myProperty release]。
  • 即使它有效,它也记录在案。 developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/…。 Quote: 但是,如果您使用现代运行时并合成实例变量,则无法直接访问实例变量,因此必须调用访问器方法。
【解决方案2】:

经验法则:(几乎)永远不要直接调用dealloc,而是使用release。有一些例外。例如,在您对象的 dealloc 方法中,您应该调用 [super dealloc]

【讨论】:

    猜你喜欢
    • 2019-10-13
    • 2016-09-05
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    相关资源
    最近更新 更多