关于"dealloc"的文档

Sta*_*ley 0 iphone cocoa-touch objective-c

在dealloc的实现中,您不应该调用超类的实现.您可以覆盖此方法以处置除对象的实例变量之外的资源,例如:

  • (void)dealloc {free(myBigBlockOfMemory); }

上面说我们不应该调用超类的实现.但在它下面说我们应该"通过消息将超级版本的dealloc合并到超级".所以两段之间似乎存在一些冲突.这一定是由于我错过了一些东西.希望有人能解释一下......

如果使用手动引用计数,则子类必须实现它们自己的dealloc版本,以允许释放对象消耗的任何其他内存 - 例如为解除分配的对象拥有的数据或对象实例变量的动态分配存储.在执行特定于类的释放后,子类方法应该通过消息将dealloc的超类版本合并到super:

  • (void)dealloc {[companion release]; 自由(myBigBlockOfMemory); [super dealloc]; }

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html

Emi*_*ier 6

您的第一个引用是针对何时启用自动引用计数(ARC),而第二个引用是针对何时启用ARC .ARC是SDK 5.0中提供的一项新功能,它消除了程序员需要完成的大量手动内存管理.

请参阅转换到ARC发行说明,特别是这些声明:

如果需要管理除释放实例变量之外的资源,则可以实现dealloc方法.你不必(实际上你不能)发布实例变量......

ARC中的自定义dealloc方法不需要调用[super dealloc](它实际上会导致编译器错误).链接到super是由编译器自动执行的.