0

viewDidLoad から createTableData を呼び出します。私が理解していないのは、NSMutableDictionary の割り当てを行っていることですが、そのオブジェクトがメモリから解放されない理由がわかりません。メモリ リークが見られますが、リークはコードのこのセクションを指しているようです。誰かが私が何をすべきか、何をしているのかを読んだり理解したりできるURLを教えてもらえますか? ここでどこが間違っているのかわかりません。

- (void)createTableData {
 NSMutableArray *toolList;
 toolList=[[NSMutableArray alloc] init];
 [toolList addObject:[[NSMutableDictionary alloc]
     initWithObjectsAndKeys:@"Some title",@"name",
          @"1",@"whatViewController",
          @"",@"url",
          @"some_icon.jpg",@"picture",
          @"some detail text",@"detailText",nil]];
 toolData=[[NSMutableArray alloc] initWithObjects:toolList,nil];
 [toolList release];
}

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

1 に答える 1

1
 [toolList addObject:[[NSMutableDictionary alloc]
     initWithObjectsAndKeys:@"Some title",@"name",
          @"1",@"whatViewController",
          @"",@"url",
          @"some_icon.jpg",@"picture",
          @"some detail text",@"detailText",nil]];

この行で、NSMutableDictionary オブジェクトを配列に追加し、解放しません。正しいコードは次のようになります (既に自動解放されたオブジェクトを返すクラス メソッドを使用):

 [toolList addObject:[NSMutableDictionary 
     dictionaryWithObjectsAndKeys:@"Some title",@"name",
          @"1",@"whatViewController",
          @"",@"url",
          @"some_icon.jpg",@"picture",
          @"some detail text",@"detailText",nil]];

または、一時辞書を明示的に自動解放します。

[toolList addObject:[[[NSMutableDictionary alloc]
     initWithObjectsAndKeys:@"Some title",@"name",
          @"1",@"whatViewController",
          @"",@"url",
          @"some_icon.jpg",@"picture",
          @"some detail text",@"detailText",nil] autorelease]];
于 2010-11-09T13:33:46.377 に答える