私のアプリでは、操作を使用して時間のかかるタスクを実行しているため、ユーザー インターフェイスがフリーズすることはありません。そのために、NSInvocationOperation を使用します。コードを実装して実際にタスクを完了する前に、最初に全体的なアーキテクチャをテストしたかったので、それが今の私が持っているものです:
// give the object data to process
- (void)processData:(NSObject*)dataToDoTask {
... // I store the data in this object
NSInvocationOperation *newOperation =
[[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(performTask)
object:nil];
[[NSOperationQueue mainQueue] addOperation:newOperation];
...
}
// process data stored in the object and return result
- (NSObject*)performTask {
[NSThread sleepForTimeInterval:1]; // to emulate the delay
return [NSString stringWithFormat:@"unimplemented hash for file %@", self.path];
}
ただし、スリープは期待どおりに機能しません。操作の完了を遅らせる代わりに、アプリをフリーズさせます。どうやら私は操作か睡眠のどちらかが間違っているようですが、どちらがどのように行われているかわかりません。