Оптимизация времени загрузки presentModalViewController: - PullRequest
0 голосов
/ 06 мая 2009

В моем NiB у меня есть несколько контроллеров View. При запуске приложения вызываются все соответствующие вызовы ViewDidLoad ().

в ViewControllerA, у меня есть ViewA, который содержит UiScrollView с 100 картинками. Инициализируйте эти картинки в ViewdidLoad. Итак, при запуске приложения все картинки инициализируются.

В моем контроллере представления главного меню есть кнопка, которая при нажатии вызывает presentModalViewController: ViewControllerA

Этот звонок занимает 20 секунд.

Я думал, что предварительная загрузка в ViewDidload оптимизирует это. Тем не менее, как только вызов возвращается и вызывается (второй раз вызывая этот VC, он действительно быстрый и мгновенный).

Так, что вызывает это? Почему так долго первый раз вызывается presentModalViewController. Внутренне, он пытается упорядочить все изображения? Есть ли способ оптимизировать это? Если нет, то какой лучший способ показать UiActivityIndicator

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 07 мая 2009

Это оказалось слишком длинным для комментария.

Сначала я бы поэкспериментировал с UITableView, чтобы посмотреть, можно ли его применить.

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

Если представление прокрутки не заполняет экран, вы все равно можете попробовать UITableView с преобразованием представления, чтобы повернуть его.

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

Еще одна сумасшедшая идея: сделать его UIWebView. Это сделает всю ленивую нагрузку для вас.

0 голосов
/ 07 мая 2009

Во-первых, поместите несколько операторов NSLog () в ваши методы -viewDidLoad. Они, вероятно, не вызывают, когда вы думаете, что они. UIViewКонтроллеры ленивы. Они фактически не загружают свои NIB, пока кто-то не ссылается на их -view.

Если «все соответствующие вызовы ViewDidLoad () вызываются», вы имеете в виду, что вы на самом деле вызываете [viewController viewDidLoad] вручную, это не сработает и не сделает этого. Это метод делегата, который должен вызываться только системой.

Вы можете, но не должны, обойти все это, вызвав [viewController view]. Это вызовет нагрузку, но это почти всегда неправильный ответ.

Насколько большие картинки? Вы действительно имеете доступную память, чтобы держать все 100 все время? Не могли бы вы загрузить эти фотографии, как вам нужно? Какую форму выкладывают картинки? Может ли UITableView сделать большую часть работы за вас? Если их в сетке, вы можете показать 4-5 картинок на UITableViewCell, и тогда вы получите все оптимизации UITableView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...