我将此属性合成并在类“ClassA”中声明
@interface ClassA
@property (nonatomic, retain) NameFieldCell* nameCell;
@end
我知道规则说当使用keep | copy | ...声明nameCell属性时,应该在我的dealloc方法中释放它。
但是,“ClassA”被延迟实例化,有时甚至没有使用nameCell属性,这意味着我既不使用它的setter方法,也不访问它,也没有明确地保留它。
我应该在我的dealloc方法中仍然调用[nameCell release]吗?我很难理解我应该发布的东西甚至还没有初始化。而且由于未初始化,因此引用计数器为0,释放它没有意义吗?还是在实例化“ClassA”时以某种方式自动保留nameCell,即使我没有使用它也是如此?
最佳答案
在Objective-C中,由alloc
分配给一个类的内存在分配时被初始化为全零(然后设置了isa
ivar),这导致nameCell
的后备ivar默认设置为nil
。而且,由于在Objective-C中向nil
发送消息不是错误(消息将被忽略),因此您可以随意调用[nameCell release]
,而不必担心是否已设置nameCell
。