私は多少ココア初心者ですが、なぜこのコードでInstrumentsのリークグラフにスパイクが表示されているのか分かりません。それは小さな漏れ(すなわち、16バイト、漏れたオブジェクトは "Generalblock-16"です;それは唯一の漏洩オブジェクトであり、Self 100%と言われています)、1つのファイルを選択するかどうかにかかわらず、 12,000ファイル。私は、InstrumentsのExtended Detailビューに表示されているStack Traceの各行をダブルクリックしていますが、私のコード内のどの行にもつながっていません。メモリリークがどこから来るのか分からない
ご協力いただきありがとうございます。
Y.V.
P .:私のコードには何も問題はありません。疑いがありますが、漏れはバグか、私のコードと無関係なものです。このコードをそのまま使用するのは安全ですか?私のアプリに不安定さをもたらしたり、クラッシュなどを起こすのだろうか?
@implementation AppController
-(IBAction)openTheOpenPanel:(id)sender
{
NSOpenPanel *openThePanel = [NSOpenPanel openPanel];
[openThePanel setAllowsMultipleSelection:YES];
if([openThePanel runModal] == NSOKButton)
{
NSArray *allTheFiles = [openThePanel filenames];
int theNumberOfFiles = [allTheFiles count];
int i;
NSMutableDictionary * theDict;
theDict = [[NSMutableDictionary alloc] init];
for (i=0; i < theNumberOfFiles; i++) {
NSString *thisFile = [allTheFiles objectAtIndex:i];
NSString *theFileNum = [NSString stringWithFormat:@"%i", i];
[theDict setObject:thisFile forKey:theFileNum];
}
[theDict writeToFile:@"/tmp/test_file.txt" atomically:YES];
[theDict release];
}
}
@end
まず、配列ではなく数字列キーの辞書を使用するのはなぜですか?第2に、 'runModal'は悪いです - 代わりに非同期バージョンの1つを使います。それらはあなたのアプリの残りの部分をブロックすることはなく、それらのいくつかは別のウィンドウのシートとしてパネルを動かすことができます。 –