Управление памятью и viewDidLoad (iphone, target-c) - PullRequest
1 голос
/ 06 августа 2010

Я размещаю NSArray в viewDidLoad (во-первых, это нормально, например, хорошая ли это практика?), Но где мне его выпустить? В ViewDidUnload, dealloc или didRecieveMemoryWarning?

(также я должен сообщить об этом, чтобы освободить, или установить в ноль, или очистить массив или комбинацию?)

Ответы [ 3 ]

1 голос
/ 06 августа 2010

Вы должны присвоить NSArray сохраненному свойству self и (автоматически) освободить его в viewDidLoad. Затем отпустите его в dealloc. В этой настройке, когда вызывается viewDidLoad, он освобождает «текущий» NSArray, если таковой имеется.

Но, похоже, вам лучше распределить NSArray в одной из init функций, если это возможно.

0 голосов
/ 06 августа 2010

Чтобы освободить объект, отправьте сообщение об освобождении:

[myObject release];

См. Свойства в dealloc: release, затем установите nil?или просто отпустите для более подробной информации.

Нет необходимости очищать массив.Когда счетчик ссылок на массив упадет до нуля, он вызовет [object release] для всех своих объектов.

0 голосов
/ 06 августа 2010

Вы можете выделить в viewDidLoad, и он вызовет release для каждого элемента, когда он отменен (он вызывает retain, когда вы добавляете их, поэтому убедитесь, что вы отпускаете, если вам нужно).

Если вам это не нужно, вы должны выпустить его как можно скорее. Если вы хотите сохранить его (потому что это кеш), то вы можете освободить его во всех трех случаях, но не выпускайте его более одного раза.

...