objective-c中的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

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

我的问题是:

我已经通过Interface Builder将我的tableview链接到我的控制器,这样它就有了一个数据源,我已经在我的控制器中实现了NSTableViewDataSource协议,并且我已经实现了
-(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];
}