2012-02-24 16 views
2

現在、画像を生成してNSMutableArrayに格納するアプリケーションを構築しています。このアプリケーションは、UINavigation(Cell.imageView.image)で使用されています。私は、自分のアプリケーションに遅れを生じさせることなく、2000枚までの画像を扱うことができる必要があります。バックグラウンドで画像を生成する

現在、この生成を​​どのように設定するかは、cellForRowAtIndexPathにアクセスしたときに生成メソッドを呼び出すことです。次のナビゲーションが呼び出されるまでに4-5秒の遅れが生じるようです。

幸いにも、それらの4-5秒後に生成が行われ、問題はありません。

私が待っているiProductsの世界では、4-5秒待っていることは本当にオプションではありません。私は自分のオプションがバックグラウンドでこれらのイメージを生成するために何をしているのだろうと思っています。私はスレッドを使って試しました[self performSelectorInBackground:@selector(presetSnapshots) withObject:nil]; しかし、それは何らかの理由でベクトルについての問題しか与えてくれませんでした。

HERESに生成コード:- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {内部

-(void)presetSnapshots{ 
    //NSAutoreleasePool* autoReleasePool = [[NSAutoreleasePool alloc] init]; 
    for (int i = 0; i < [selectedPresets count]; ++i){ 
     GraphInfo* graphInfo = [selectedPresets objectAtIndex:i]; 
     graphInfo.snapshot = [avc takePictureOfGraphInfo:graphInfo PreserveCurrentGraph:false]; 
     [graphInfo.snapshot retain]; 
    } 
    //[autoReleasePool drain]; 
    presetSnapshotFinished = YES; 

} 

がある

if (presetSnapshotFinished == NO){ 
     [self presetSnapshots]; 
     //[self performSelectorInBackground:@selector(presetSnapshots) withObject:nil]; 

    } 

    cell.imageView.image = [[selectedPresets objectAtIndex:indexPath.row] snapshot]; 

編集:

私もなく、このためcoreDataを使用していません。画像は23x23で約7kbになります。だから約6メガバイトは、メモリ上の任意の時間に使用されている。

答えて

1

あなたは、私がこれをもっとアップ読んであげる[self presetSnapshots]

dispatch_queue_t working_queue = dispatch_queue_create("com.yourcompany.image_processing", NULL); 
dispatch_queue_t high = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,NULL); 
dispatch_set_target_queue(working_queue,high); 
dispatch_queue_t main_queue = dispatch_get_main_queue(); 

dispatch_async(working_queue,^{ 
    if (presetSnapshotFinished == NO){ 
     [self presetSnapshots]; 
    } 
    dispatch_async(main_queue,^{ 
     cell.imageView.image = [[selectedPresets objectAtIndex:indexPath.row] snapshot]; 
    }); 
}); 
+0

を起動するためにグランドセントラル派遣(GCD)を使用することができます。しかし、私はあなたのコードを試して、stl_constuct.hのBAD_ACCESSを取得しました。特に107行目(__pointer->〜_Tp(); }スタックを見ると、そのクリーンアップメソッドの問題です。私はGCDと私のクリーンアップが矛盾している理由を理解します。 –

+1

私はこのスニペットをバックグラウンド処理のためにほとんど問題なく使用しています – dom

関連する問題