iPhone SDK:Dealloc vs. Release?

时间:2009-11-05 18:31:15

标签: iphone

我想知道release和dealloc之间的区别是什么?阅读后,内存管理规则(见下文)。我正在考虑大部分时间我将使用发布。但是,我想知道如何处理物业。

@属性(保留)......

我一直在使用dealloc,但在阅读本文后,我不确定这是否正确。

如果使用名称以“alloc”或“new”开头或包含“copy”(例如,alloc,newObject或mutableCopy)的方法创建对象,或者如果发送它,则获取对象的所有权保留信息。您有责任使用release或autorelease放弃您拥有的对象的所有权。在收到对象的任何其他时间,您都不能释放它。

3 个答案:

答案 0 :(得分:21)

除了dealloc以外的其他任何内容,您都不应该致电super

您调用dealloc的唯一时间是在自定义继承对象的dealloc方法中,它将是[super dealloc]

当对象的保留计数降至零时,系统会自动为您调用dealloc,因此为了正确管理内存,您需要调用retainrelease在适当的时候。

如果您不清楚这一点,或者您想了解有关如何在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