私は過去にNSOperation
/NSOperationQueue
を単純なスレッド化に使用しました。具体的にNSInvocationOperation
は、しばらく時間がかかるメソッド呼び出しを非常に簡単にスピンし、NSOperationQueue
実際にスレッド化することができます。スポーンする方法はスレッドセーフである必要がありますが、それは特に難しいことではありません。たとえば、またはメソッドでを作成しNSOperationQueue
て-init
から-viewDidLoad
、NSInvocationOperation
をキューに追加して、途中で送信することができます。
NSOperationQueue *opQueue = [[NSOperationQueue alloc] init];
NSInvocationOperation *lengthyTask = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(processAddresses) object:nil];
[opQueue addOperation:lengthyTask];
[lengthyTask release];
(特にデスクトップで)ちょっとクールなことの1つは、10.6(およびiOS 4)ではGrandCentralDispatchが自動的に使用されることです。
長いタスクをスレッド化すると、アプリの応答性が向上します(特に、結果を監視し、スレッド化されたタスクからの結果を表示する場合は、おそらくKVOを使用します)が、キャッシュを実装すると便利です。起動するたびにアドレス帳を再読み込みすると、非常にコストがかかります。特に、ほとんどの人はアドレス帳をあまり変更しません。計算されたデータをローカルファイルまたはデータベースに保存できます(コアデータの使用はそれほど難しくありません。速度が遅すぎる場合は、SQLiteを直接使用できます)。次に、起動時に、アドレス帳を調べて、アプリが最後に実行されたときからの各レコードの変更日を比較し、新しく変更されたレコードをジオコーディングできます。