GDCによる非同期実行

UITableViewやUICollectionViewで画像をダウンロードするときなどに使う.

非同期実行キューに処理を追加する.

dispatch_queue_t q_global, q_main;
q_global = dispatch_get_global_queue(0, 0);
q_main = dispatch_get_main_queue();

q_globalは非同期実行キュー,時間のかかる処理はここで行う.
q_mainはメインスレッド,インターフェイスの更新はここで行う.インターフェイス更新以外の処理には適さないので注意 .

UICollectionViewで実行した例.処理の本体はdispatch_asyncメソッドから.

//Async download
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
                  cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
  SSMainViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MY_CELL"
                                                                   forIndexPath:indexPath];
  
  SSImageURL *imageURL = [_urlArrayobjectAtIndex:[indexPath row]];
  NSString *url = [imageURL thmbnailImageUrl];
  
  dispatch_queue_t q_global, q_main;
  q_global = dispatch_get_global_queue(0, 0);
  q_main = dispatch_get_main_queue();
  
  [cell retain];
  //[manager retain];
  
  dispatch_async(q_global, ^{
    NSData *data = [NSDatadataWithContentsOfURL:[NSURLURLWithString:url]];
    UIImage *image = [[UIImagealloc] initWithData:data];
    
    dispatch_async(q_main, ^{
      cell.imageView.image = image;
    });
  });
  
  return cell;
}