Как лучше всего загружать изображения в iPhone? - PullRequest
6 голосов
/ 18 февраля 2011

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

  • Ленивая загрузка изображений с Apple developer.com

  • Реализован асинхронный метод улучшения отложенной загрузки

  • Использовал отдельный основной поток для обработки загруженного изображения.

  • Использовали приложение ECOImageLoadingDemo для отложенной загрузки.

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

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

С уважением,

Пугал

Ответы [ 2 ]

4 голосов
/ 18 февраля 2011

Исходя из моего опыта, решения с точки зрения производительности и памяти находятся на противоположных концах слайдера. Вы можете перемещаться со своим решением где-то между этими двумя, но с тем недостатком, что лучшее решение с точки зрения производительности обычно означает худшее решение с точки зрения памяти и наоборот. Надеюсь, я объяснил это достаточно ясно:)

Вот как я решаю проблему отложенной загрузки изображений:

В своем приложении я создал ОДНУ сущность, которую я назвал GlobalImageProvider . Все запросы на изображения проходят через эту сущность. Таким образом, у меня есть контроль над тем, сколько потоков я использую для загрузки, и я могу реализовать систему кэширования (память + локальный диск), все это полностью прозрачно для приложения и с полным контролем. Контролируя размер кэша, я могу контролировать, насколько быстро приложение чувствует себя. С точки зрения производительности ничто не сравнится с тем, что UIImage уже создано в памяти. Что касается памяти, вы даже можете отключить кеш.

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

Чтобы делать онлайн-запросы, я использую NSURLConnection, но я планирую переключиться на что-то еще, так как я прочитал, что это утечка памяти.


Что касается вида и контроллеров, у меня есть AsyncImageView, который является просто UIImageView, который знает, как работать с GlobalImageProvider. Он знает, как отображать индикатор активности во время загрузки, и может обработать ответ от GlobalImageProvider.
Если вы знаете URL нужного изображения, все, что вам нужно сделать, это добавить AsyncImageView на экран и сделать запрос к GlobalImageProvider с AsyncImageView в качестве «обработчика» для этого изображения.

Если вам не нравится смешивать данные с представлениями изображений, вы можете добавить ViewController между GlobalImageProvider и AsyncImageView. Он получает ответ изображения и помещает его в ImageView.

Вот и все, надеюсь, это вам немного поможет.

1 голос
/ 18 февраля 2011

Вы можете взглянуть на этот отличный учебник из Peepcode в разделе Бонус: KVO для сотовых изображений

http://peepcode.com/products/iphone-view-controllers-part-ii

...