Objective-C - 我是不是需要取消分配未使用的保留属性?

Posted

技术标签:

【中文标题】Objective-C - 我是不是需要取消分配未使用的保留属性?【英文标题】:Objective-C - Do I need to de-alloc a retained property that isn't used?Objective-C - 我是否需要取消分配未使用的保留属性? 【发布时间】:2010-11-25 20:41:45 【问题描述】:

如果我有一个想要重用的自定义视图控制器类,但在一个实例中使用时有一个在视图生命周期中实际未使用的保留属性,我是否需要在 dealloc 中释放它?

【问题讨论】:

【参考方案1】:

您应该释放在 dealloc 中分配或保留的所有对象。

如果它在界面生成器中被引用,您还需要在视图控制器的 viewDidUnload() 中释放并设置为 nil,并在您的 dealloc 中释放。

【讨论】:

这不仅是一种好的做法,而且是你应该做的。【参考方案2】:

向 nil 发送消息是可以的,所以无论如何你都应该在 dealloc 中释放你的保留属性。如果该属性没有被使用,它将是 nil 并且向它发送释放实际上是一个空操作。

【讨论】:

我在网上的一些例子中看到了以下代码 - if (iVar != nil) [iVar release];其中 iVar 也是保留属性。 if语句有什么原因吗? @Glynton:不,这只是浪费时间。 nil 被记录为能够接收消息。它除了返回 0/nil 什么都不做。【参考方案3】:

您无需对保留的属性调用 release。 setter 方法的实现使得给它一个空值将为您释放它。在您的 dealloc 方法中,只需将其设置为 nil:

self.someProperty = nil;

【讨论】:

这种方法存在风险;如果有东西仍在观察someProperty,它将在对象的dealloc 期间收到更改通知,其中状态几乎可以保证未定义。 如果 someProperty 在子类中被覆盖。

以上是关于Objective-C - 我是不是需要取消分配未使用的保留属性?的主要内容,如果未能解决你的问题,请参考以下文章

设置 setNumberRows 是不是会取消分配不需要的行?

如何使用 XCTest 测试一个 navigationBar 是不是未在 Objective-C 中设置为特定颜色?

条件分配/释放? 【Objective-c与Cocos2D】

Objective-C:我的 int 值不是我所期望的

取消未保存的更改而不关闭文件

在 Objective-C 中,为啥在分配给指定类型的变量时需要强制转换?