как бороться с NSMutableDictionary - PullRequest
0 голосов
/ 09 ноября 2010

Я вызываю createTableData из viewDidLoad.Чего я не понимаю, так это того, что я делаю alloc для 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];
}

1 Ответ

1 голос
/ 09 ноября 2010
 [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]];
...