关于“dealloc”的文档

时间:2012-01-30 01:27:17

标签: iphone objective-c cocoa-touch

  

在dealloc的实现中,你不应该调用   超类的实现。您重写此方法以进行处置   对象的实例变量以外的资源,例如:

     
      
  • (无效)的dealloc   {   自由(myBigBlockOfMemory);   }
  •   

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

  

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

     
      
  • (void)dealloc {   [同伴发布];   自由(myBigBlockOfMemory);   [super dealloc]; }
  •   

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

1 个答案:

答案 0 :(得分:6)

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

请参阅Transitioning to ARC Release Notes,特别是这些陈述:

  

如果需要管理资源,可以实现dealloc方法   除了释放实例变量。你不必(确实如此)   你不能发布实例变量......

     

ARC中的自定义dealloc方法不需要调用[super dealloc]   (它实际上导致编译器错误)。超级链接是   自动化并由编译器强制执行。