Цель C проблема с памятью! - PullRequest
0 голосов
/ 19 июня 2011

У меня проблема в следующих двух строках кода

   NSDictionary* last = [[arrHistory lastObject] autorelease];
   [arrHistory removeLastObject];

В отладчике я вижу, что после выполнения первой строки кода last указывает на словарь с парами значений (как это должно).

Проблема во второй строке кода.Это швы, чтобы уничтожить содержание словаря.Я думал, что autorelease в строке 1 решит проблему, но это не так.

Ответы [ 2 ]

12 голосов
/ 19 июня 2011

Что вам нужно сделать, это отправить объекту сообщение retain.

NSDictionary* last = [[arrHistory lastObject] retain];
[arrHistory removeLastObject];

Коллекции освобождают объекты после их удаления, поэтому вам необходимо отправить сообщение retain, чтобы стать владельцемэтого.

0 голосов
/ 19 июня 2011

arrHistory владеет своими членами, вы не должны называть release / autorelease своего члена, которым вы не владеете, прежде чем стать его владельцем.

Если хотите использовать последний объект после удаления, вы можете сделать это так:

NSDictionary* last = [[arrHistory lastObject] retain] autorelease];

...