2012-03-04 3 views
1

Я использую ARCIphone DEV - ViewDidUnload

В некоторых учебных пособиях, которые я смотрю, он когда-то сделал UILabel, а затем в методе ViewDidUnload он писал: self.theLabelVariable = ноль; Я еще не видел, чтобы он писал что-нибудь в ViewDidUnload снова с тех пор.

Я немного смущен тому, какой код должен идти в этом методе.

1. Что и когда следует писать в нем? Комментирует: «Отпустите все сохраненные подзоны основного вида. Например, self.myOutlet = nil;" Не совсем уверен, что это значит, что

2. У этого также есть [[super ViewDidUnload] "Что это делает?

3. Кто-то сказал, что «прокладывать его до нуля, когда вы не собираетесь использовать его снова, это хорошая идея». Но в учебнике, где кто-то написал «self.TheLabelVariable = nil», когда я нажал кнопку «домой», а затем снова привнес приложение, все сработало нормально. Или это не cViewDidUnload, когда вы нажимаете кнопку «домой»? Я полагаю, что третий вопрос: когда он называется?

ответ

0

Вы должны сделать это со всеми вашими IBOutlets. Вы должны установить их все на nil. И [super viewDidUnload]; выгружает супервизор! Его вид вроде [super viewDidLoad];

0

1 - Вы должны использовать viewDidUnload для освобождения (установить значение nil, если это свойство), любой объект, который не нужен при разгрузке представления, например представлениях, и что вы снова заново создадите объект viewDidLoad , Пример: вам не нужна метка при разгрузке представления (нажатием кнопки «домой»), затем вы отпускаете ее, а затем создаете ее снова, когда приложение загружается (приложение открывается).

2 - [super something] вызывает метод на суперклассе. Например, если у вас есть класс, являющийся потомком UIViewController, вызывающий [super viewDidUnload], будет выполняться код UIViewController для AppleDIVUnload (который может быть пустым ... или нет).

3 - См. Пример на 1. Но дело в том, что, когда вам не нужен объект, он больше задает его, чтобы он мог быть освобожден, и вы не теряете память.

Сообщите мне, если я что-то пропустил или если что-то не понял.

EDIT

Для представлений, которые инициализируются из XIB файла (Interface Builder), называемые IBOutlets, вам не нужно делать self.label = ноль; потому что UIViewController делает это за вас. Подобно тому, как он инициализировал его для вас, он также выпустит его.

+0

Отличный ответ, еще один вопрос или два ... 1. Означает ли это, что если я поставил self.label = nil; в ViewDidUnload, мне нужно сделать self.label = что-то в ViewDidLoad? Но в коде, где он помещал self.label = nil ;, он ничего не писал в ViewDidLoad, но ярлык все еще сказал «синий» после нажатия кнопки «домой», а затем снова поднял его. И приложение все еще работает (нажмите кнопку -> изменить текст метки) – user1021085

+0

Я отредактировал свой ответ, проверьте его. – fbernardo

+0

Я использую раскадровку, если это имеет значение. Поэтому, если я перейду к своей раскадровке, перетащите в нуль – user1021085

Смежные вопросы