我已经使用alloc/init
方法创建了一个对象,并且在我释放它之后,应立即按文档调用-dealloc
。我在-dealloc
方法上设置了一个断点,但未命中,并且我的-dealloc
方法未被调用。当我释放特定对象时,不会调用Dealloc方法
请告诉我背后的原因是什么,目标c中的dealloc方法有什么用?
我已经使用alloc/init
方法创建了一个对象,并且在我释放它之后,应立即按文档调用-dealloc
。我在-dealloc
方法上设置了一个断点,但未命中,并且我的-dealloc
方法未被调用。当我释放特定对象时,不会调用Dealloc方法
请告诉我背后的原因是什么,目标c中的dealloc方法有什么用?
当你期望它被调用时,并不总是调用-dealloc
方法。由于内部原因,运行时也可能在您的对象上发布了-retain
。
您也有可能(直接或间接)导致额外发行-retain
。如果保留/分配和释放不平衡,您永远不会看到-dealloc
调用。它有助于打开静态分析仪,以确保您的通话平衡。
只要遵循内存管理规则,不要再次猜测运行时间,并让内存管理系统完成其工作。
When does dealloc method call?的答案可能会帮助您了解所看到的内容。
无论何时释放对象,都会调用dealloc
(在更多情况下)。你不能直接调用这个方法。
@interface myViewController:UIViewController
{
NSString *myStr;
}
@end
在这里,在的myViewController
的@implementation的dealloc
方法将被调用(在大多数情况下)的myViewController
对象被释放时,而不是当myStr
被释放。
虽然你不必使用,如果你ARC。
因为它仍然有参考。这意味着其引用计数未达到零。我不知道你的代码在哪里引用。但它并没有调用这个方法,但它仍然有参考价值。这可能是因为强关系或者亲子关系
所有Objective-C的对象是在堆上分配的,所以他们必须 因此在某个地方,如果你不跑出来的 释放资源。
这让位于引用计数方法,该方法仍在今天使用 :每个对象都保留对它的任何引用的计数。如果您收到一个对象并且想要保留该对象,则保留该对象, 递增其引用计数。当你完成它,你会释放它,它减少了它的引用计数。一旦 的计数达到零,就会推断没有人引用该对象,并且使用-dealloc方法自动释放该对象。
此外,可以通过使用自动释放池来告知对象“在某个时间点在 (希望)不久的将来”释放该对象。这个想法是 堆栈上的某处(通常在线程的开始或 响应输入事件)创建自动释放池并将 推送到堆栈上。任何对象然后可以被发送一个-autorelease消息,并且它被分配给该池。
当池对象被释放时,它只是发送一个“释放” 消息给其所有分配的对象。这样,任何没有 更长时间使用的对象(即它们没有被明确保留)然后解除分配 。
http://stackoverflow.com/questions/559295/difference-between-release-and-dealloc-in-objective-c – Balu 2013-04-22 06:52:04
请寄一些代码吗? – 2013-04-22 06:52:45