我将此属性合成并在类“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

09-27 21:19