Загрузка изображения из потока пользовательского интерфейса? - PullRequest
0 голосов
/ 30 октября 2011

Как я могу загрузить изображение из ресурса в фоновом потоке?

Я сейчас занимаюсь этим, и это несколько замедляет работу моего интерфейса:

image = [NSData dataWithContentsOfFile:imageName];

Я бы предпочел загрузить его в фоновый поток.

Ответы [ 2 ]

6 голосов
/ 30 октября 2011
dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_async(backgroundQueue,^{
  // background process
  image = [NSData dataWithContentsOfFile:imageName];
  dispatch_async(mainQueue,^{
    // always update GUI from the main thread
    // uiimageview.image = image.... etc
 });
});
3 голосов
/ 30 октября 2011

Вы можете использовать CGDataProvider, чтобы открыть CGImage.

Например,

, вы можете использовать CGImageCreateWithPNGDataProvider, а поставщик данных будет ссылаться на CFURL. Вы можете использовать аналогичный подход для CFData представлений.

, затем вы можете использовать CGImage или вернуться к основному потоку и создать представление UIImage.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...