С NSArray объектных ссылок я явно освобождаю все объекты в массиве или только сам массив? - PullRequest
44 голосов
/ 20 мая 2009

В моем классе есть NSArray, который заполнен объектами. В моем методе dealloc я могу просто вызвать release для моего NSArray или мне нужно перебрать массив и сначала освободить все объекты?

Ответы [ 3 ]

55 голосов
/ 20 мая 2009

Вы можете позвонить в релиз прямо на NSArray. Реализация NSArray позаботится об отправке release всем объектам, хранящимся в массиве.

10 голосов
/ 20 мая 2009

NSArray сохраняет объекты, когда они добавляются, и освобождает их, когда они удаляются или массив освобождается. Имейте это в виду, что именно эта концепция «владения» основана на управлении сохранением / выпуском памяти. То же самое относится и к объекту, которому принадлежит массив, если он также сохранил объекты в массиве, вам нужно будет отправить им еще одно сообщение об освобождении в вашей реализации dealloc. Если нет, и если никакие другие объекты не сохранили их, они будут освобождены, как только массив освободит их.

1 голос
/ 20 мая 2009

Вы сможете просто выпустить NSArray, и он освободит все свои объекты, независимо от того, есть ли у вас другие ссылки на них. Если у вас есть экземпляр объекта, который также существует в NSArray, вам придется явно освободить этот объект - простое освобождение NSArray может не освободить объект вне контекста массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...