1

私は現在objective-cを学んでおり、現在NSTableViewでトレーニングしています。

ここに私の問題があります:

データソースを持つように、Interface Builder を介してテーブルビューをコントローラーにリンクし、コントローラーに 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];
}

これらの解放は、アプリケーションのライフサイクルでいつ呼び出されることになっていますか? 窓が閉まるときに呼び出されると思っていたのですが、そうではありませんでした。

十分に明確であることを願って、

ありがとう :)

凧。

4

2 に答える 2

4

(唯一の)ウィンドウを所有するウィンドウコントローラーオブジェクトを決して解放していないと仮定しています。そのため、ウィンドウ コントローラと nib ファイル内のすべての最上位オブジェクトは、ウィンドウ (およびそのビュー) を含め、アプリケーションのライフサイクル全体で保持されます。

ウィンドウ コントローラーはアプリケーションのライフサイクルを通じて存在するため、解放されず、その-deallocメソッドが呼び出されることはありません。また、コントローラー-deallocメソッドは呼び出されないため、そのpersonnes配列は解放されません。

personnes配列はその要素を所有しています。配列は解放されず、その要素も解放されないため-dealloc、対応するクラス/インスタンスのメソッドが呼び出されることはありません。

于 2011-04-12T13:59:32.807 に答える
2

絶対に 使用 しないでくださいretainCount。結果はせいぜい誤解を招くものです。適切なメモリ管理を実践すれば、問題ありません。メモリの問題やクラッシュがありましたか?

于 2011-04-12T13:40:16.097 に答える