IOS: Как узнать, вызван ли viewDidLoad?
Есть ли BOOL или какой-либо другой способ узнать, был ли viewDidLoad: вызван?
Мне нужно изменить свойство вида каждый раз, когда мое представление вступило в активную, но если представление никогда не было загружено, я не хочу преждевременно запускать viewDidLoad:. Если нет способа легко сказать, был ли вызван viewDidLoad: я просто добавлю BOOL с именем загруженный set в NO в init контроллера представления, а затем измените свойства вида после ввода active, если загружено YES или в viewWillAppear: если загружен НЕТ, тогда установите значение "ДА".
Ответы
Ответ 1
Используйте isViewLoaded
. Помимо этого он делает именно то, что вы хотите, не так много сказать об этом. Документация проста:
Вызов этого метода сообщает, загружено ли представление. в отличие от view, он не пытается загрузить представление, если он не является уже в памяти.
Ответ 2
Возможно, вы должны запустить свой UIView в viewDidLoad
, а затем изменить его каким бы то ни было способом внутри viewWillLayoutSubviews
.
Ответ 3
Вот педантичный ответ на этот вопрос. Если вы хотите узнать, когда был запущен viewDidLoad
, вы должны реализовать viewDidLoad
в своем контроллере просмотра
- (void)viewDidLoad
{
[super viewDidLoad];
viewDidLoadCalled = YES; // Not actually the best way to do this...
// Set up more view properties
}
Но, как говорит Томми, вам действительно нужно использовать isViewLoaded
. Это связано с проблемой проверки, например,
if (!self.view) {
// do something
}
который непреднамеренно загружает представление в силу запроса об этом.
Помните, что к моменту появления viewWillAppear:
, просмотр всегда будет загружен. Кроме того, по более старым (до iOS 6, я думаю) релизам, представление может разгружаться и перезагружаться многократно по времени жизни контроллера. Обратитесь к очень красивой диаграмме жизненного цикла просмотра Nerd Ranch для поведения old. Это почти то же самое в iOS 6+, за исключением того, что представление не выгружается в условиях низкой памяти, а viewDidUnload
не вызывается:
![enter image description here]()