1

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

这是我的问题:

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

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

但是后来,我NSLog在我的 dealloc 方法中放了一些来查看内存是否被释放,似乎我的数组以及我的“人”实例永远不会被释放。

这是我在控制器中的 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?因为我希望他们在窗口关闭时被调用,但它没有。

希望足够清楚,

谢谢 :)

风筝。

4

2 回答 2

4

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

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

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

于 2011-04-12T13:59:32.807 回答
2

永远 不要使用 retainCount. 结果充其量是误导性的。如果你练习正确的内存管理实践,你会没事的。您有任何内存问题/崩溃吗?

于 2011-04-12T13:40:16.097 回答