我在我的类“ClassA”中合成并声明了此属性
@interface ClassA
@property (nonatomic, retain) NameFieldCell* nameCell;
@end
我知道规则规定,当使用retain|copy|声明时,应该在我的dealloc方法中释放nameCell属性...
但是,“ClassA”会延迟实例化,有时甚至不使用 nameCell 属性,这意味着我不使用它的 setter 方法,也不访问它,也不显式保留它。
我还应该在我的 dealloc 方法中调用 [nameCell release] 吗?我发现很难理解我应该释放一些甚至没有初始化的东西。而且由于没有初始化,引用计数器为0,释放它没有意义?或者,即使我没有使用它,在实例化“ClassA”时,nameCell 是否会以某种方式自动保留?
最佳答案
在 Objective-C 中,由 alloc
为类分配的内存在分配时被初始化为全位零(然后设置 isa
ivar),这会导致 nameCell
的支持 ivar 默认设置为 nil
。由于在 Objective-C 中向 nil 发送消息并不是一个错误(该消息只是被忽略),因此您可以随意调用 [nameCell release]
而无需担心 nameCell
是否已设置。
关于objective-c - 释放 iOS 中未使用的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6875650/