現在NSThread
、別のスレッドで画像をキャッシュするために使用しています。
[NSThread detachNewThreadSelector:@selector(cacheImage:) toTarget:self withObject:image];
代わりに:
[self performSelectorInBackground:@selector(cacheImage:) withObject:image];
または、NSOperationQueue
NSInvocationOperation *invOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(cacheImage:) object:image];
NSOperationQueue *opQueue = [[NSOperationQueue alloc] init];
[opQueue addOperation:invOperation];
から切り替える理由はありますNSThread
か?GCDはiPhone向けにリリースされたときの4番目のオプションですが、パフォーマンスが大幅に向上しない限り、ほとんどのプラットフォームで機能する方法を使い続けたいと思います。
@ Jon-Ericのアドバイスに基づいて、NSOperationQueue
/NSOperation
サブクラスソリューションを使用しました。それは非常にうまく機能します。このNSOperation
クラスは十分に柔軟性があるため、必要に応じて、呼び出し、ブロック、またはカスタムサブクラスで使用できます。どのように作成してNSOperation
も、実行する準備ができたら、操作キューに入れることができます。操作は、キューに入れるオブジェクトとして機能するように設計されているか、必要に応じてスタンドアロンの非同期メソッドとして実行できます。カスタム操作メソッドを同期して簡単に実行できるため、テストは非常に簡単です。
この質問をして以来、私はいくつかのプロジェクトでこれと同じ手法を使用してきましたが、コードとテストをクリーンで整理され、楽しく非同期に保つ方法に満足することはできませんでした。
A++++++++++再びサブクラス化されます