В моем классе есть NSArray, заполненный объектами. В моем методе dealloc я могу просто вызвать выпуск на моем NSArray или мне нужно выполнить итерацию массива и сначала отпустить все объекты?
С NSArray ссылок на объекты, я явно освобождаю все объекты в массиве или только сам массив?
Ответ 1
Вы можете вызвать release непосредственно на NSArray
. Реализация NSArray
позаботится о передаче release
ко всем объектам, хранящимся в массиве.
Ответ 2
NSArray сохраняет объекты при их добавлении и освобождает их, когда они удаляются, или массив освобождается. Помните об этом, на основе этой концепции "владения", которая сохраняет/освобождает управление памятью. То же самое с объектом, которому принадлежит массив, если он также сохранил объекты в массиве, вам нужно будет отправить им другое сообщение о выпуске в вашей реализации dealloc. Если нет, и если никакие другие объекты не сохранили их, они будут освобождены после того, как массив освободит их.
Ответ 3
Вы должны просто освободить NSArray, и он выпустит все его объекты, независимо от того, держите ли вы другие ссылки на них. Если у вас есть экземплярный объект, который также существует в NSArray, вам нужно будет выпустить этот объект явно - только освобождение NSArray не может деалоблировать объект за пределами контекста массива.