Я представляю контроллер вида:
SCAAboutController2 *controller = [[SCAAboutController2 alloc] initWithNibName:nil bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
[self presentViewController:navController animated:YES completion:nil];
Устройство отображается в течение 3-4 секунд перед представлением. Я попытался диагностировать это с помощью инструментов, но, похоже, большая часть времени проведена в main
-
Вот такой же профиль, но с системными библиотеками:
Ни одно из этих сообщений не распознается мне, поэтому я не уверен, как начать отладку моей проблемы с производительностью.
Я читал в другом месте, что я должен проверить, что основной код выполняется в основном потоке. Однако следующее изменение ничего не улучшает:
dispatch_async(dispatch_get_main_queue(), ^{
SCAAboutController2 *controller = [[SCAAboutController2 alloc] initWithNibName:nil bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
[self presentViewController:navController animated:YES completion:nil];
});
У меня быстро заканчиваются идеи о том, как прогрессировать. Как я могу исследовать дальше и/или что может быть основной причиной медленной презентации?
Edit
Некоторые запутанные открытия:
- Я удалил весь код из представленного контроллера представления. Производительность не изменяется.
- У меня есть другой контроллер, который я представляю с одного и того же места с помощью другой кнопки. Он одинаково медленный.
- в представлении контроллера имеется довольно много подзадач и ограничений - даже некоторые дочерние контроллеры. Удаление кода, который заполняет эти проблемы, устраняет проблему.
- в
viewWillDisappear
контроллера представления ничего не добавлено.
Изменить 2
Я обнаружил, что проблемы сосредоточены вокруг ряда ограничений компоновки, которые я добавляю в основной (представляющий) контроллер. В частности, я прохожу через некоторые дочерние контроллеры (типа teamController
) и добавляю ограничение:
[self.browser addConstraint:[NSLayoutConstraint constraintWithItem:teamController.view
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:self.browser
attribute:NSLayoutAttributeWidth
multiplier:1
constant:0]];
Существует только 10 дочерних контроллеров. Также странно: у меня нет таких проблем, если вместо этого я использую следующее:
[self.browser.contentView addConstraint:[NSLayoutConstraint constraintWithItem:teamController.view
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1
constant:200]];
Я все еще очень смущен относительно того, почему эти ограничения приводят к тому, что презентация другого модального висит, и почему одна вариация ограничения ведет себя по-разному друг к другу.