当在objective-c中调用dealloc时

时间:2010-08-06 22:01:44

标签: iphone objective-c

如果我创建一个像这样的简单类

@interface table : NSObject {

    NSMutableArray *array;
}

@end

在Init方法中我调用:array = [[NSMUtableArray alloc] init]; 在dealloc方法中,我打电话给:[array release];

但我有一个记忆韭菜因为从不调用dealloc方法。我必须自己调用dealloc方法吗?

3 个答案:

答案 0 :(得分:1)

当对象的保留计数达到0时,它将被清理的运行时间标记。当运行时清理对象并回收内存时,调用dealloc使其有机会清除对实例变量等的任何其他对象引用。这有帮助吗?如果你想看到它,请输入

NSLog(@"%s", _cmd);

或dealloc方法开头的断点并观察调试器/控制台。

答案 1 :(得分:0)

没有。你永远不应该直接致电[self dealloc]。是什么让你觉得-dealloc从未被调用?

编辑:您永远不需要致电[table dealloc]。您应该发送dealloc消息的唯一时间是覆盖dealloc并致电[super dealloc]

答案 2 :(得分:0)

这看起来都很正确。这里的类table的实例将在完全释放时调用它的dealloc方法。因此,如果您使用类的方式导致整个table实例泄漏,那么您只会有泄漏。

但是,当然,相同的规则适用于使用table类的任何类。