Преимущества awakeFromNib?

Я изучал основные данные, создавая множество простых тестовых приложений на основе шаблона контроллера навигации xcode с установленным флажком «использовать основные данные».

Метод awakeFromNib в делегате App был для меня источником проблем, потому что я добавляю другие представления в контроллер и меняю последовательность загрузки, так что RootViewController может быть вторым или третьим выбором.

Я выяснил, что делает awakeFromNib, и удалил его, чтобы делегат приложения больше не был привязан к какому-либо конкретному представлению. (Поэтому, когда я захочу загрузить RootViewController, я загружу его как обычное представление и использую его собственный viewDidLoad для инициализации manageObjectContext для представления).

Мой вопрос: есть ли прирост производительности или другие преимущества при использовании awakeFromNIb в AppDelegate? или это просто еще один способ сделать то же самое, что и я, из метода viewDidLoad?


person nick    schedule 23.06.2011    source источник


Ответы (1)


Все методы срабатывают в разное время и при разных обстоятельствах.

awakeFromNib вызывается, когда файл пера, связанный с классом, загружается с диска. Любой класс, у которого есть перо, может его использовать. viewDidLoad используется только контроллерами представления. Обычно он также вызывается при загрузке из nib, но также может вызываться представлением, созданным в памяти (очень редкое обстоятельство).

В любом случае вы добавляете только функциональные возможности, которые вы хотите запускать только один раз при первой загрузке экземпляра. Например. распространенной ошибкой новичков является размещение кода в viewDidLoad, который должен запускаться каждый раз, когда появляется представление. Скажем, как с основным представлением, которое открывает подробное представление, а затем снова появляется при закрытии подробного представления. Если код для главного представления находится в viewDidLoad, он будет выполняться только при первой загрузке главного представления, но не при каждом последующем исчезновении и появлении главного представления.

Обычно вы не инициализируете какие-либо другие представления или ничего не делаете в пробуждающемся делегате приложения от nib. Это обычно выполняется в applicationDidFinishLaunching.

person TechZen    schedule 23.06.2011
comment
Хорошо спасибо. Я просто беспокоился, что избавление от awakeFromNib в делегате приложения и перемещение кода инициализации в viewDidLoad может снизить производительность. - person nick; 24.06.2011