我目前正在学习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?因为我期望它们在窗口关闭时被调用,但事实并非如此。
希望足够清楚,
谢谢:)
风筝。
答案 0 :(得分:4)
我假设您永远不会释放拥有(仅)窗口的窗口控制器对象。因此,窗口控制器和nib文件中的每个顶级对象都会在整个应用程序生命周期中保留,包括窗口(及其视图)。
由于窗口控制器在整个应用程序生命周期中都存在,因此它不会被释放,因此永远不会调用它的-dealloc
方法。并且,由于永远不会调用控制器-dealloc
方法,因此不会释放其personnes
数组。
personnes
数组拥有其元素。由于数组未被释放,因此它的元素也不会被释放,因此永远不会调用相应类/实例的-dealloc
方法。
答案 1 :(得分:2)
Don't ever use retainCount
。结果充其量是误导性的。如果你练习正确的内存管理实践,你会没事的。你有任何记忆问题/崩溃吗?