objective-c中的NSTableViewDataSource解除锁定
我目前正在学习objective-c,并且正在使用NSTableView进行培训 我的问题是: 我已经通过Interface Builder将我的tableview链接到我的控制器,这样它就有了一个数据源,我已经在我的控制器中实现了NSTableViewDataSource协议,并且我已经实现了objective-c中的NSTableViewDataSource解除锁定,objective-c,cocoa,macos,nstableview,dealloc,Objective C,Cocoa,Macos,Nstableview,Dealloc,我目前正在学习objective-c,并且正在使用NSTableView进行培训 我的问题是: 我已经通过Interface Builder将我的tableview链接到我的控制器,这样它就有了一个数据源,我已经在我的控制器中实现了NSTableViewDataSource协议,并且我已经实现了-(NSInteger)numberOfRowsInTableView:和-(id)tableview:objectValueForTableColumn:row:方法 我已经创建了一个原始业务类(“pe
-(NSInteger)numberOfRowsInTableView:
和-(id)tableview:objectValueForTableColumn:row:
方法
我已经创建了一个原始业务类(“person”),并成功地将其内容显示到我的NSTableView中
但随后,我在dealloc方法中放入了一些NSLog
,以查看内存是否被释放,似乎我的数组以及我的“person”实例从未被释放
以下是我在控制器中的解除锁定代码:
-(void)dealloc
{
NSLog(@"the array is about to be deleted. current retain : %d",[personnes retainCount]);
[personnes release];
[super dealloc];
}
在我的“个人”课上
应该在应用程序生命周期中何时调用这些解除?因为我以为他们会在窗户关上的时候被叫来,但事实并非如此
希望足够清楚
谢谢:)
风筝。。结果充其量只是误导。如果你练习正确的内存管理练习,你会没事的。您是否有任何内存问题/崩溃?。结果充其量只是误导。如果你练习正确的内存管理练习,你会没事的。您是否有任何内存问题/崩溃?我假设您从未释放拥有(唯一)窗口的窗口控制器对象。因此,窗口控制器和nib文件中的每个顶级对象在整个应用程序生命周期中都会保留,包括窗口(及其视图) 由于窗口控制器存在于应用程序的整个生命周期中,因此它不会被释放,因此它的
-dealoc
方法永远不会被调用。而且,由于从未调用controller-dealoc
方法,因此不会释放其人员
数组
persones
数组拥有其元素。由于数组未释放,其元素也未释放,因此不会调用相应类/实例的-dealloc
方法。我假设您从未释放拥有(唯一)窗口的窗口控制器对象。因此,窗口控制器和nib文件中的每个顶级对象在整个应用程序生命周期中都会保留,包括窗口(及其视图)
由于窗口控制器存在于应用程序的整个生命周期中,因此它不会被释放,因此它的-dealoc
方法永远不会被调用。而且,由于从未调用controller-dealoc
方法,因此不会释放其人员
数组
persones
数组拥有其元素。由于数组未被释放,其元素也未被释放,因此相应类/实例的-dealoc
方法从未被调用。那些-dealoc
方法从未被调用?你的应用程序是否只有这一个视图?只是关于重新计数的一些建议。。不要依赖它。[self->nom release]应该是[nom release]这是我唯一的看法是的。我的意思是,我的NStableView只有默认窗口。而且dealloc永远不会被调用(当我关闭窗口时,应该是正确的情况,)那些-dealloc
方法永远不会被调用?你的应用程序只有这一个视图吗?只是一些关于重新计数的建议。。不要依赖它。[self->nom release]应该是[nom release]这是我唯一的看法是的。我的意思是,我的NStableView只有默认窗口。而且dealloc永远不会被调用(当我关闭窗口时,应该是这样),一点也不,我只是想看看当我关闭窗口(这是我应用程序的唯一窗口)时内存是如何释放的。即使不显示保留计数,也不会调用dealloc。谢谢您的建议。通过做一些研究,我发现这是为了避免在Appkit/UiKit应用程序中使用。但它在控制台应用程序中仍然有价值吗?@Kite作为一个控制台应用程序不会改变任何事情。为了从保留计数中获得有用的信息,有几个因素需要考虑,所以通常最好避免这些因素。如果你好奇,考虑与COCGA框架的交互如何改变保留计数,如何(以及何时)自动保存池改变保留计数,什么是常数对象的保留计数,以及多线程代码如何影响保留计数。因此,最终它们给了我们控制整个内存管理的感觉,但情况并非完全如此(不像C/C++)。那么,让我们只关心objet的所有权,当我更多地使用这种语言时,我会看看这些要点^^你控制你需要控制的一切。你从retainCount
中得到的数字很有趣,但几乎毫无用处。一点也不,我只是想看看当我关闭窗口(这是我应用程序的唯一窗口)时内存是如何释放的。即使不显示保留计数,也不会调用dealloc。谢谢您的建议。通过做一些研究,我发现这是为了避免在Appkit/UiKit应用程序中使用。但它在控制台应用程序中仍然有价值吗?@Kite作为一个控制台应用程序不会改变任何事情。为了从保留计数中获得有用的信息,有几个因素需要考虑,所以通常最好避免这些因素。如果你好奇,考虑与COCGA框架的交互如何改变保留计数,如何(以及何时)自动保存池改变保留计数,什么是常数对象的保留计数,以及多线程代码如何影响保留计数。因此,最终它们给了我们控制整个内存管理的感觉,但情况并非完全如此(不像C/C++)。那么,让我们只关心objet的所有权,当我更多地使用这种语言时,我会看看这些要点^^你控制你需要控制的一切。你听到的数字
-(void) dealloc
{
NSLog(@"%@ is about to be deleted. current retain : %d",[self prenom],[self retainCount]);
[self->nom release];
[self->prenom release];
[super dealloc];
}