Ответ 1
Точка -awakeFromNib
заключается в том, что вы можете выполнять инициализацию, когда можете быть уверены, что все ваши соединения с другими объектами в nib были установлены.
Инфраструктура nib-load отправляет сообщение awakeFromNib каждому объект, воссозданный из архива nib, но только после того, как все объекты в архив загружен и инициализирован. Когда объект получает сообщение awakeFromNib, гарантировано, что у него есть все действия уже установлены.
Не забудьте вызвать super
.
В ближайшее время вряд ли удастся уйти, и если бы он сделал так много кода, он использовал бы его, чтобы переходный период был долгим. Да, его имя происходит от старого формата файла "nib", но этот вопрос устраняет различия в расширениях файлов.
Таким образом, любой метод будет работать для вас, поскольку вы устанавливаете внутреннюю переменную экземпляра для класса. Обратите внимание, что внутри методов init
(включая -initWithCoder
) может быть небезопасно использовать ваши методы настройки в случае, если сеттеры полагаются на полностью инициализированный класс (исходное видео WWDC 2012 переходит на современный objective-c). Примером может быть установка свойства, которое ссылается на другой объект в файле nib.
В UIViewController
подклассы -initWithCoder
вызывается только при загрузке из раскадровки. Поскольку -awakeFromNib
вызывается, используете ли вы раскадровки или нет, это может иметь смысл использовать это.
Другой образец, который вы могли бы рассмотреть, - ленивый получатель:
-(NSMutableArray *)articles{
if (_articles){
return _articles;
}
_articles = [[NSMutableArray alloc] init];
return _articles;
}
Преимущество этого подхода состоит в том, что если вы хотите продолжить настройку массива, вы можете легко отбросить массив, когда он вам больше не понадобится, и в следующий раз, когда вы получите доступ к свойству, вы снова получите новый.