iPhone: лучшая практика использования NSThread для загрузки тысяч изображений? - PullRequest
0 голосов
/ 06 февраля 2010

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

Как лучше всего использовать NSThread для загрузки тысяч изображений?

Спасибо,
Джим.

Ответы [ 3 ]

3 голосов
/ 06 февраля 2010

NSThread не проблема. Похоже, вы просто перегружаете аппаратное обеспечение iPhone. Помните, что мобильная платформа обладает лишь малой мощностью даже самого медленного ноутбука.

Посмотрите, как приложение для фотографий должно время от времени размывать изображение. Иногда это нужно делать и с миниатюрами. Отображение веб-страницы с интенсивной графикой может занять до 10-20 секунд.

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

3 голосов
/ 06 февраля 2010

Также рассмотрите возможность использования NSOperationQueue для координации этих загрузок. Используя классы NSOperationQueue и NSOperation, вы можете запланировать тысячу загрузок, но убедитесь, что одновременно происходит только определенное количество загрузок.

Чтобы набрать бонусные баллы, используйте API Reachability, чтобы узнать, подключен ли пользователь к сети 3G или Wifi, и установите количество одновременных загрузок на основе этого.

1 голос
/ 06 февраля 2010

Если вы загружаете изображения через http, я рекомендую использовать фреймворк ASIHTTPRequest . Он может легко загружать HTML, изображения и другие материалы в асинхронном режиме.

Но будьте осторожны, чтобы не загружать одновременно много файлов. Я прочитал где-то , что 10 HTTP-соединений одновременно должны быть хорошими. (Где-то был проект AppSales-Mobile ReviewUpdater.h значение, установленное jonkean в его commit )

...