Объект Autorelease возвращен из NSArray?

Я пишу категорию NSArray, чтобы включить сообщение -objectAtRandom, которое возвращает объект из случайного индекса (что-то похожее на выбор).

Должен ли я автоматически освобождать этот объект перед его возвратом? Я считаю, что не должен, но я не уверен...


person cfischer    schedule 25.10.2010    source источник


Ответы (2)


Согласно обычным правилам управления памятью, нет, не должны. Поскольку вы предположительно используете objectAtIndex: для возврата объекта, вам не нужно самостоятельно управлять памятью.

person Carl Norum    schedule 25.10.2010

Я бы написал return [[object retain] autorelease] - это гарантирует, что даже если массив будет освобожден, пользователь сможет работать с объектом до окончания текущего цикла выполнения.

person kovpas    schedule 25.10.2010
comment
Это не нужно. NSArray поддерживает сильную ссылку до тех пор, пока не будет удален из массива. Если разработчик удаляет массив, вероятно, следует понимать, что он потенциально освобождает все содержащиеся в нем объекты. - person AdamH; 25.10.2010
comment
@adam Итак, если пользователь хочет убедиться, что он не закончит недопустимой ссылкой на объект, он должен сохранить ее и освободить, когда закончит? - person cfischer; 25.10.2010
comment
Правильно. Вы можете делать все, что хотите, но как только ваш код освободит управление, вы должны сохранить объект, если хотите использовать его позже. Если вы используете объект только в локальной области, вам не нужно его сохранять. - person AdamH; 25.10.2010