0

ViewVillAppear で以下のように plist ファイルを読み込んでいます。最初のロードではリークはありませんが、他のタブバーボタン/アイテムを押してこのビューに戻るとリークが発生します。この NSMutableArray を dealloc でリリースしましたが、まだリークしています。その理由について少し混乱しています。(theProducts3 は、.h の ivar と同じように NSMutableArray であり、@property または保持されていません)

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];  

NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *plistPath = [rootPath stringByAppendingPathComponent:@"basket.plist"];
theProducts3 = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];

NSLog(@"Number of objects in item array %i", [theProducts3 count]);
}

ここで NSMutable 配列を解放します。

-(void)dealloc{
[theProducts3 release];
[super dealloc];
}

どんなポインタでも大歓迎です!ありがとう...

4

1 に答える 1

1

deallocの逆ではありませんviewWillAppear:。の逆ですalloc。の逆はviewWillAppear:ですviewWillDisappear:

何が起こっているかというと、ビューが表示されているときにメモリを割り当ててから、別のビュー コントローラに移動して戻ってきて、ビューが再び表示され、さらに多くのメモリを割り当てているため、元のメモリがリークしています。

ビューがメモリ内にある限り、配列がぶらぶらするだけでよい場合は、 に割り当ててviewDidLoad:と で解放しviewDidUnload:ますdeallocnil解放した後、インスタンス変数を に設定することを忘れないでください。

于 2012-05-14T22:08:24.707 に答える