Objective-c中的NSTableViewDataSource dealloc

时间:2011-04-12 13:37:00

标签: objective-c cocoa macos nstableview dealloc

我目前正在学习objective-c,目前我正在使用NSTableView进行培训。

这是我的问题:

我已经通过Interface Builder将我的tableview链接到我的控制器,因此它有一个数据源,我在我的控制器中实现了NSTableViewDataSource协议,并且我已经实现了-(NSInteger) numberOfRowsInTableView:-(id) tableView:objectValueForTableColumn:row:方法。

我创建了一个原始业务类(“person”),我成功地将其内容显示在我的NSTableView中。

但是,我在dealloc方法中放了一些NSLog来查看内存是否被释放,似乎我的数组以及我的“person”实例都没有被释放。

这是我在控制器中的dealloc代码:

-(void)dealloc
{
    NSLog(@"the array is about to be deleted. current retain : %d",[personnes retainCount]);

    [personnes release];
    [super dealloc];
}

和我的“人”类

-(void) dealloc
{
    NSLog(@"%@ is about to be deleted. current retain : %d",[self prenom],[self retainCount]);

    [self->nom release];
    [self->prenom release];

    [super dealloc];
}

什么时候应该在应用程序生命周期中调用这些dealloc?因为我期望它们在窗口关闭时被调用,但事实并非如此。

希望足够清楚,

谢谢:)

风筝。

2 个答案:

答案 0 :(得分:4)

我假设您永远不会释放拥有(仅)窗口的窗口控制器对象。因此,窗口控制器和nib文件中的每个顶级对象都会在整个应用程序生命周期中保留,包括窗口(及其视图)。

由于窗口控制器在整个应用程序生命周期中都存在,因此它不会被释放,因此永远不会调用它的-dealloc方法。并且,由于永远不会调用控制器-dealloc方法,因此不会释放其personnes数组。

personnes数组拥有其元素。由于数组未被释放,因此它的元素也不会被释放,因此永远不会调用相应类/实例的-dealloc方法。

答案 1 :(得分:2)

Don't ever use retainCount。结果充其量是误导性的。如果你练习正确的内存管理实践,你会没事的。你有任何记忆问题/崩溃吗?