NSOperation
onを使用してバックグラウンド スレッドで検索を実装しようとしていiOS
ます。サブクラス化したくなかったNSOperation
ので、これが私がやっていることです:
[searchQueue cancelAllOperations];
NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self
elector:@selector(filterContentForSearchText:)
object:self.searchDisplayController.searchBar.text];
[searchQueue addOperation:op];
[op release];
search メソッドには、検索対象が配列内にあるかどうかをチェックする for ループが含まれています。NSOperation
を呼び出して をキャンセルするとcancelAllOperations
、for ループは引き続き配列を処理します。これを防ぎたいのですが、for ループ内からこれを呼び出すことが正当かどうか疑問に思っていました。
if ([[[searchQueue operations] objectAtIndex:0] isCancelled]) {
[tmp_array release]; // tmp_array is used to hold temporary results
[pool drain]; // pool is my autorelease pool
return;
}