Что я должен использовать, - awakeFromNib или-viewDidLoad?
недавно у меня была проблема в моем приложении, где некоторые из подвидов, которые я создавал в подклассе UIViewController -awakeFromNib метод исчезали из поля зрения. После некоторого копания я обнаружил, что перемещение кода, который я вставил -awakeFromNib до -viewDidLoad решена проблема. Кажется, что -awakeFromNib вызывается только один раз, когда для UIViewController является разархивирована от кончика, а -viewDidLoad вызывается каждый раз, когда представление разархивирована.
так что это лучшая практика? Похоже UIViewController -awakeFromNib Не следует добавлять какие-либо представления в представление, такие вещи должны быть сделаны в -viewDidLoad. Я правильно понимаю? Или я запутался больше, чем думал?
4 ответа:
awakeFromNibвызывается, когда контроллер это разархивирована от ниб.viewDidLoadвызывается, когда посмотреть создан/разархивирована. Это различие особенно важно, когда вид контроллера хранится в отдельном файле nib.
также важно, что
awakeFromNibфункция никогда не будет вызвана после восстановления из памяти предупреждения. НоviewDidLoadфункция будет вызываться.
Да, это правильно. Вы не должны действительно полагаться на
awakeFromNibдля выполнения такого рода задач.
awakeFromNibпохоже на событие, которое вызывается после десериализации в. NET.viewDidLoadпохож наLoadсобытие .Чистая.если вы знакомы с понятиями из .NET, этого должно быть достаточно, я думаю.
я постараюсь ответить на примере:
если определить
customCellкласс аcustomCell.xibфайл, а затем загрузить ячейку с помощью- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options,awakeFromNib вызывается, когда объекты в xib являются разархивирована.если вы определили
customViewController, когдаcustomViewControllerсоздается с помощью- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil. viewDidLoad будет вызван, когда он загружен в иерархию представления.некоторые связанные путаешь методы:
(void)loadView; это где подклассы должны создать свою собственную иерархию представления, если они не используют перо. Если вы не укажете имя пера, loadView попытается загрузить перо, имя которого совпадает с классом контроллера представления. Если такой nib не существует, то вы должны либо вызвать-setView: before-view вызывается, либо переопределить-loadView метод для настройки представлений программно. - loadView никогда не должен называться непосредственно.
(void)viewDidLoad: вызывается после загрузки представления. Для viewControllers, созданных в коде, это after-loadView. Для контроллеров представлений, неархивированных из пера, это происходит после установки представления.