2009-11-05 30 views
6

我在想,release和dealloc有什么不同?阅读后,内存管理规则(见下文),我想大多数时候我会使用release。但是,我想知道如何处理属性。iPhone SDK:Dealloc vs. Release?

@property(保留)....

我一直在使用的dealloc但读完这篇文章后,我不知道这是正确的。

如果您使用名称以“alloc”或“new”开头或包含“copy”(例如alloc,newObject或mutableCopy)的方法创建对象,或者将它发送给对象保留消息。您有责任放弃使用发行版或自动发行版所拥有的对象的所有权。任何其他时间你收到一个对象,你不能释放它。

回答

21

除了super之外,您不应该致电dealloc

您唯一会打电话给dealloc的是自定义继承对象的dealloc方法,它将是[super dealloc]

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

如果您对此不清楚,或者想要了解可可内存如何管理的详细信息,则应该阅读Memory Management Programing Guide

+0

谢谢你的解释。 –

+1

谢天谢地ARC出来了! –

5

您从不直接拨打dealloc。它是由系统调用时的对象retainCount变为0每次你做一个保留,在retainCount递增与1你做一个释放每一次,它就会递减。这样一来,通过平衡你的保留发布,可以确保比当retainCount到达0,的dealloc将自动被调用,和你的对象释放。

正如本的著名,唯一的时间和地点,你会打电话的dealloc是在继承对象的的dealloc方法。

0

当您使用@property(retain)然后@synthesize来生成属性代码时,您不需要对属性执行任何手动内存管理。其他答案是正确的,你不应该使用dealloc,除非你自己重写父类dealloc