谁调用dealloc方法和什么时候在Objective C?

Suj*_*jal 14 objective-c dealloc

在Objective C中创建自定义类时,该dealloc方法何时以及如何调用?这是我必须在课堂上以某种方式实现的吗?

PJR*_*PJR 17

您永远不会直接发送dealloc消息.相反,通过释放NSObject协议方法间接调用对象的dealloc方法(如果释放消息导致接收者的保留计数变为0).有关使用这些方法的更多详细信息,请参阅"内存管理编程指南".

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

重要说明:请注意,当应用程序终止时,可能不会向对象发送dealloc消息,因为进程的内存在退出时自动清除 - 仅仅允许操作系统清理资源比调用所有内存管理方法更有效.出于这个原因和其他原因,您不应该在dealloc中管理稀缺资源

 - (void)release
 {
   _retainCount--;
   if (_retainCount == 0) {
       [self dealloc];
    }
  }
Run Code Online (Sandbox Code Playgroud)


Cal*_*leb 5

想象一下,这-release是在NSObject中实现的,如下所示:

- (void)release
{
    _retainCount--;
    if (_retainCount == 0) {
        [self dealloc]
    }
}
Run Code Online (Sandbox Code Playgroud)

我确定它比这复杂一点,但你的问题的答案是,-dealloc当它的保留计数降到零时,对象本身会调用.但是,您的自定义类将从NSObject继承此行为.你永远不需要在你编写的代码中调用-dealloc; 当对象被正确释放时,它总是会自动发生.