Подтвердить что ты не робот

С NSArray ссылок на объекты, я явно освобождаю все объекты в массиве или только сам массив?

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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