iPhone Dev - куда положить код отложенной загрузки - PullRequest
4 голосов
/ 05 августа 2009

У меня уже был такой вопрос, но я все равно его удалил.

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

Так как я загружаю свои контроллеры представления и выгружаюсь в определенное время, ленивый код загрузки, находящийся в геттерах, очень запутанный, потому что я на самом деле не хочу загружать их правильно, когда использую их, мне нужно загрузить их раньше флип анимация будет хорошо смотреться. Так что я думаю, что я хочу сделать методы loadFirstVC и loadSecondVC для загрузки контроллеров представления. Это хорошая идея?

1 Ответ

6 голосов
/ 05 августа 2009

Основная причина отложенной загрузки - НЕ откладывать загрузку, которая обязательно произойдет. Это для отсрочки загрузки, которая может никогда не понадобиться. (Это также хорошо для принудительной перезагрузки, когда данные изменились, но это не ваша проблема здесь.)

Пример. Допустим, у вас есть куча данных о человеке, включая фотографию, которая хранится во внешнем файле. Но фотография будет отображаться только в том случае, если пользователь перейдет в подпредставление, поэтому зачем загружать фотографию из ее файла, пока вы точно не узнаете, что подпредставление появится? Бум, используй ленивую загрузку.

К тому времени, когда вы ЗНАЕТЕ, что хотите загрузить определенный фрагмент данных, маловероятно, что когда вы его загрузите, это будет иметь большое значение.

Когда это имеет значение? Ну, это действительно вопрос оптимизации. Есть поговорка, по которой вы могли столкнуться; если нет, то сейчас самое подходящее время: «Преждевременная оптимизация - корень всего (программирования) зла».

Поэтому задайте себе два вопроса:

  1. Будет ли определенно необходим фрагмент данных? Если НЕТ, переходите к технике ленивой загрузки. Если ДА, переходите к вопросу 2.

  2. Имеет ли значение, когда я загружаю данные? [Например, он огромен, и я не хочу его загружать, пока я НЕ ЗАГРУЗИЛ что-то еще, чтобы освободить место для него.] Если НЕТ, поместите его в любое место, которое работает. Если ДА ... Вернитесь и спросите нас снова, и предоставьте более подробную информацию.

... Я подозреваю, что это не отвечает на ваш первоначальный вопрос, но, похоже, вы задаете неправильный вопрос в первую очередь. Извиняюсь, если я ошибаюсь.

...