2010-08-18 2 views
5

Что такое достойный способ загрузки UIImages по требованию без блокировки основной нити?Lazy Загрузка UIImages из файлов без блокировки основной темы?

Контекст: У меня есть несколько тысяч изображений на стене, которые я могу прокрутить. Очевидно, что не просто загрузить все UIImages, так что сейчас я просто ленив загружаю те, которые отображаются, а затем освобождая их, когда они больше не нужны. Проблема в том, что загрузка UIImages из файлов занимает немного времени, достаточно долго, чтобы вызвать заикание во время прокрутки. Это далеко не большие изображения (около 250x250, а может быть, 20-30 килобайт каждый), но они все еще вызывают заикание.

ответ

0

Я использую подклассу UIImageView для чего-то подобного. В основном он используется для загрузки изображений (например, аватары и изображения в потоке твиттера), поэтому для загрузки изображения с URL-адреса используется NSURLConnection. Затем URLConnection вызывает метод делегата, который затем используется для обновления UIImageView. Дополнительный я добавил позже статический словарь с кэшированными изображениями, поэтому изображения, которые используются чаще всего, не нужно загружать каждый раз. Это очень полезно для таких вещей, как упомянутые выше аватары twitter.

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

0

Вы можете сделать это очень просто. Сначала создайте очередь при создании объекта UIScrollView. После создания вы можете загружать изображение из своего локального хранилища только с созданной очередью.

//get a dispatch queue 
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 


//this will start the image loading in bg 
dispatch_async(concurrentQueue, ^{   
    NSData *image = [[NSData alloc] initWithContentsOfURL:imageURL]; 

    //this will set the image when loading is finished 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     imageView.image = [UIImage imageWithData:image]; 
    }); 
}); 
Смежные вопросы