我想知道release和dealloc之间的区别是什么?阅读后,内存管理规则(见下文)。我正在考虑大部分时间我将使用发布。但是,我想知道如何处理物业。
@属性(保留)......
我一直在使用dealloc,但在阅读本文后,我不确定这是否正确。
如果使用名称以“alloc”或“new”开头或包含“copy”(例如,alloc,newObject或mutableCopy)的方法创建对象,或者如果发送它,则获取对象的所有权保留信息。您有责任使用release或autorelease放弃您拥有的对象的所有权。在收到对象的任何其他时间,您都不能释放它。
答案 0 :(得分:21)
除了dealloc
以外的其他任何内容,您都不应该致电super
。
您调用dealloc
的唯一时间是在自定义继承对象的dealloc
方法中,它将是[super dealloc]
。
当对象的保留计数降至零时,系统会自动为您调用dealloc
,因此为了正确管理内存,您需要调用retain
和release
在适当的时候。
如果您不清楚这一点,或者您想了解有关如何在Cocoa中管理内存的详细信息,请阅读Memory Management Programing Guide。
答案 1 :(得分:5)
您永远不会直接调用 dealloc 。当对象的 retainCount 变为0时,系统将调用它。每次执行保留时, retainCount 将增加1每次执行发布时,它都会减少。这样,通过平衡保留和版本,可以确保 retainCount 达到0时, dealloc 将被自动调用,你的对象被释放。
正如Ben S所指出的那样,你可以调用 dealloc 的唯一时间和地点位于继承对象的 dealloc 方法中。
答案 2 :(得分:0)
当您使用@property(retain)
然后@synthesize
生成属性代码时,您无需对该属性执行任何手动内存管理。其他答案是正确的,因为您不应该使用dealloc
,除非您自己覆盖父类dealloc
。