NSMutableArray будет выпущен? - PullRequest
1 голос
/ 15 мая 2011

У меня есть NSMutableArray, свойство которого (nonatomic, retain), и по какой-то причине оно освобождается, вот код, когда я его назначаю (tableData - это NSMutableArray):

tableData = [[[NSMutableArray alloc] init] autorelease];

Когда я выделяю его, его счетчик сохранения равен 1. Когда я назначаю его для tableData, его счетчик хранения равен 2. Затем с автоматическим освобождением в конце цикла запуска он должен перейти к 1 (что я и хочу). Но этого не происходит. Позже, когда я ссылаюсь на него и запускаю метод, я получаю случайные объекты (в прошлый раз это был UITabBarSwappableImageView), и он говорит, что нераспознанный селектор отправлен. Что имеет смысл ... объект освобождается, а какой-то другой занимает его место ... Но почему он освобождается? Спасибо.

Ответы [ 2 ]

3 голосов
/ 15 мая 2011

Он освобождается, потому что присвоение ему tableData не меняет счет сохранения .

Вы просто копируете значение указателя из одного слота в памяти в другой слот. Вот и все. Не было отправлено сообщение о смене владельца.

Вам необходимо вызвать метод установки:

[self setTableData:[NSMutableArray array]];

Или, если вы предпочитаете точечный синтаксис:

self.tableData = [NSMutableArray array];
2 голосов
/ 15 мая 2011

Вы использовали точечный синтаксис?Если нет, то синтезированный сеттер не используется, поэтому ссылка не сохраняется.

Его следует назначить так:

self.tableData = [[[NSMutableArray alloc] init] autorelease];
...