2009-05-06 2 views
0

В моем NiB у меня есть несколько контроллеров View. Когда приложение запускается, вызываются все соответствующие вызовы ViewDidLoad().Оптимизация времени загрузки presentModalViewController:

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

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

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

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

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

Спасибо заранее

ответ

0

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

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

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

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

+0

У меня есть все мои VCs в одном XIB и я проверил с сообщениями NSLog, что viewDidLoad становятся призваны запуском приложения :( My App в пейзаже, и я хочу Scrollview, который прокручивает horzontial с изображением на нем. Что рекомендация вы бы дали для такого рода реализации – user82383

1

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

Я бы сначала поиграл с UITableView, чтобы узнать, может ли он применяться.

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

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

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

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

+0

Спасибо Роб за ваш ответ, я очень благодарен. Я пытаюсь оптимизировать способ загрузки изображений в моем представлении прокрутки (загрузка один за другим). Вместо того, чтобы моя инициализация в LoadView Я получаю их в ViewDidLoad: Анимированные. Тем не менее, я не могу заставить их отображаться один за другим (так что пользователь видит прогресс) .Они просто все появляются. Не могли бы вы сделать elobrate на вашем подставке? Я хотел бы реализовать это – user82383

+0

Вам нужен новый UIImageVi ew подкласс. Он должен обеспечить изображение-заполнитель правильного размера, пока он извлекает реальное изображение. Если вы извлекаете с диска, то вам нужно поместить реальную картинку в фоновый поток. Если вы извлекаете из сети, вы можете использовать NSURLConnection для загрузки его в основной поток без блокировки. Когда UIImage будет загружен, вы вызовете setImage: замените местозаполнитель для реального. Возможно, вам придется вызвать setNeedsDisplay: в этот момент также получить его для перерисовки. –

Смежные вопросы