2014-01-16 3 views
0

Безопасно ли загружать объекты UIImageView в фоновом режиме, и когда это делается, вставьте их в иерархию представлений в основной теме?Как загрузить объекты UIImageView в фоновом режиме?

Например, вы создаете блок GCD, который загружает 10 изображений в фоновом режиме. В конце у вас есть блок асинхронизации, который добавляет все UIImageViews для просмотра иерархии.

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

+0

Вы загружаете эти изображения? Они уже на диске? Вы видите некоторые проблемы с производительностью (в частности)? – Wain

+0

попробуйте [Asyncronous image view] (https://github.com/nicklockwood/AsyncImageView) вместо 'uiimageView'. –

ответ

1

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

__weak typeof(self) weakSelf = self; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) { 
     NSData *imageData= [NSData dataWithContentsOfURL:Image_URL]; 
     UIImage *image = [UIImage imageWithData:imageData]; 

     dispatch_sync(dispatch_get_main_queue(), ^(void) { 
      __strong __typeof__(weakSelf) strongSelf = weakSelf; 
      strongSelf.someImageView.image = image; 
      ; 
     }); 
    }); 

ПРИМЕЧАНИЕ: Если вы используете AFNetworking, вы можете использовать UIImageView категорию и она будет Генделя изображение загрузки в фоновом режиме, а также может кэшировать, поэтому если вы хотите, чтобы загрузить снова принесет этот образ из кэш.

+0

Нужно ли использовать __weak self в блоке GCD? – johnMa

+0

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

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