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; }