В ARC, как мне выпустить элементы в NSArray? - PullRequest
7 голосов
/ 26 августа 2011

При стандартном ручном управлении памятью Objective-C в этом вопросе было предложено использовать способ выпуска NSArray, инициализированный с помощью

imageArray  = [[NSArray alloc] initWithObjects:[UIImage imageNamed:@"1.png"], 
                        [UIImage imageNamed:@"2.png"],
                        nil];

,

* 1007.*

Учитывая, что мы больше не можем использовать -release при автоматическом подсчете ссылок, каков будет предложенный способ выпустить этот NSArray под ARC?

Ответы [ 2 ]

19 голосов
/ 26 августа 2011

Чтобы использовать ARC, вы просто удаляете свои сообщения retain и release и все.Таким образом, вы избавляетесь от своего массива следующим образом:

 imageArray = nil;

Это работает и не дает утечки, потому что при ARC компилятор автоматически вставляет необходимые retain и release вызовы.

12 голосов
/ 26 августа 2011

Если imageArray является иваром для объекта (возможно, небезопасное предположение), вы должны использовать метод доступа, чтобы установить для массива значение nil; средство доступа позаботится об освобождении массива и всех его членов:

[self setImageArray:nil];

Если вам нужно очистить массив с большим количеством членов, но при этом сохранить действительный массив в этом иваре, чтобы другие методы могли безопасно отправлять ему сообщения, вы можете использовать следующее:

[self setImageArray:[[NSArray alloc] init]];

Что заменит старый массив новым, пустым массивом.

...