【问题标题】:Releasing Unused properties in iOS在 iOS 中释放未使用的属性
【发布时间】:2011-10-16 01:57:03
【问题描述】:

我在我的类“ClassA”中合成并声明了这个属性

@interface ClassA
    @property (nonatomic, retain) NameFieldCell* nameCell;
@end

我知道规则说 nameCell 属性应该在我的 dealloc 方法中使用retain|copy|声明时释放...

但是,'ClassA' 被延迟实例化,有时甚至没有使用 nameCell 属性,这意味着我不使用它的 setter 方法,也不访问它,也不显式保留它。

我还应该在我的 dealloc 方法中调用 [nameCell release] 吗?我很难理解我应该发布一些甚至没有初始化的东西。而且既然没有初始化,那么引用计数器为0,释放它就没有意义了?还是在实例化“ClassA”时,nameCell 会以某种方式自动保留,即使我没有使用它?

【问题讨论】:

  • 是的,你仍然应该在你的 dealloc 方法中释放它。

标签: objective-c ios oop properties dealloc


【解决方案1】:

在 Objective-C 中,alloc 为一个类分配的内存在分配时被初始化为全位为零(然后设置了isa ivar),这导致nameCell 的支持 ivar默认设置为nil。而且由于在 Objective-C 中向nil 发送消息不是错误(该消息只是被忽略),因此您可以随意调用[nameCell release] 而不必担心是否设置了nameCell

【讨论】:

    【解决方案2】:

    如果nameCell 为零,则[nameCell release] 无效。这很容易涵盖这两种情况,所以是的,你应该在你的 dealloc 方法中释放它。

    或者开始使用ARC,你就不用担心了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多