在iOS中发布未使用的属性

时间:2011-07-29 15:44:42

标签: objective-c ios oop properties dealloc

我在我的班级'ClassA'中合成并声明了这个属性

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

那或开始使用ARC,你不必担心它。

答案 1 :(得分:3)

在Objective-C中,alloc为类分配的内存在分配时初始化为all-bits-zero(然后设置isa ivar),这导致{{1默认情况下,支持ivar设置为nameCell。由于在Objective-C中向nil发送消息并不是错误(该消息只是被忽略),因此您可以随时致电nil,而无需担心[nameCell release]是否为nameCell永远不会。