Выпускается NSMutableArray?

#objective-c #cocoa #memory-management #retaincount

#objective-c #cocoa #управление памятью #сохранить количество

Вопрос:

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

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

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

Ответ №1:

Он выпускается, потому что присвоение его tableData не изменяет количество сохранений.

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

Вам действительно нужно вызвать метод setter:

 [self setTableData:[NSMutableArray array]];
  

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

 self.tableData = [NSMutableArray array];
  

Ответ №2:

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

Он должен быть назначен следующим образом:

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