何时调用dealloc方法?

什么时候调用
dealloc
方法?我发现(在很多例子中)很多NS变量都是在它实例化的方法中发布的,但是在合成组件时,他们将释放放在dealloc方法中。     
已邀请:
Apple参考文件明确指出 到接收器的后续消息可能生成错误,指示消息已发送到解除分配的对象(假设尚未重新分配的已释放的内存)。 您永远不会直接发送dealloc消息。相反,通过释放NSObject协议方法间接调用对象的dealloc方法(如果释放消息导致接收者的保留计数变为0)。有关使用这些方法的更多详细信息,请参阅“内存管理编程指南”。 子类必须实现它们自己的dealloc版本,以允许释放对象消耗的任何额外内存 - 例如动态分配的存储空间,用于解除分配对象拥有的数据或对象实例变量。在执行特定于类的释放后,子类方法应该通过消息将dealloc的超类版本合并到super:   重要说明:请注意,当应用程序终止时,可能不会向对象发送dealloc   消息,因为进程的内存在退出时自动清除 - 它更有效   只是允许操作系统清理资源而不是调用所有内存   管理方法。由于这个原因和其他原因,你不应该管理稀缺的资源   的dealloc 另一个问题iPhone - 什么时候是一个叫做viewcontroller的dealloc?     
当您加载nib文件时,必须是一个所有者 应用程序中存在的对象。如果你打开了nib文件 界面构建器您将看到代表所有者的代理图标 的nib文件。您可以连接它,但连接 未建立UNTIL nib文件已加载,您指定谁 真的很棒。 无论如何,你可以在顶部连接一个插座(例如i-var) nib文件中的级别UI对象,通常是窗口。当你加载 nib文件并指定i-var现在将指向的所有者 UI对象。让我们说这是一个窗口。最终当你决定 摆脱你只是释放所有者的UI对象,如果它 达到保留计数为零,dealloc方法将被调用。 然后所有者的dealloc方法应该释放它的i-vars (实例变量)。那么让我们说你连接的i-var 窗口叫做窗口。那你应该有类似的东西 这个: - (void)dealloc { [窗口发布]; [super dealloc]; } 那应该会使窗口达到零计数。然后 应该调用窗口的dealloc,然后调用它 释放子视图上的所有保留,子视图将到达 保留计数为零,他们随后将释放所有 保留他们的子视图,依此类推,直到所有内容都被取消分配。 我做了AppKit(可可)编程已经有一段时间了,但我想 这仍然是事实。 有一个名为OmniObjectAlloc的Omni应用程序 就像在查看你的应用程序时应该非常有用的那样 搞清楚是否所有东西都被取消了。我用过ObjectAlloc 来自NeXT / Apple,但我不知道他们是否仍然提供它。寻找 它,我想它仍然存在。     
它基于您实际创建或保留的对象的范围。 每当将retaountount恢复为1时,dealloc方法将由其自己调用。 这仅适用于MRC,不适用于ARC。 一个很好的注意事项是跟踪您创建的对象,让它在您的实现中不泄漏。     

要回复问题请先登录注册