возвращение объекта, полученного из NSMutableArray через objectAtIndex - требуется ли автоматическое освобождение? - PullRequest
1 голос
/ 22 апреля 2011

Сценарий. У меня есть метод, который возвращает объект, извлеченный из NSMutableArray, аналогично следующему коду, который был упрощен (предположим, что «myArray» и «currentIndex» являются iVars для класса, в котором находится этот метод):

- (MyObject *)getFromArray
{
    return [myArray objectAtIndex:currentIndex];
}

Стоит ли мне так звонить на авто-релиз?

- (MyObject *)getFromArray
{
    return [[myArray objectAtIndex:currentIndex] autorelease];
}

Я знаю, что autorelease вызывается для объекта массивом, когда он возвращает указанный объект, но я понимаю, что объект autoreleased действителен только на время действия вызывающей стороны, в данном случае описанного выше метода. Итак, будет ли правильное использование автоматического выпуска (как показано выше во 2-м фрагменте кода) правильным способом убедиться, что рассматриваемый объект действителен для вызывающей стороны моего метода? Просто пытаюсь убедиться, что мои рассуждения и понимание того, как работает авто-релиз, верны.

Спасибо!

1 Ответ

6 голосов
/ 22 апреля 2011

Стоит ли мне звонить на авто-релиз?

Нет!Всегда следуйте простым правилам управления памятью: если вы не владеете им (по alloc, new, copy или retain), вы не должны (автоматически) освобождать его.

Я знаю, что авторелиз вызывается объектом из массива, так как он возвращает указанный объект

Это предположение неверно.Массив просто возвращает объект, но не освобождает его.(На самом деле это может вызвать [[... retain] autorelease] для объекта, но это другое дело.) Массив освободит объект, только когда вы удалите объект из массива или когда сам массив будет освобожден.

...