可能性のあるUIDocumentサブクラスを使用していますが、複数のスレッドから呼び出されるsaveToURL
メソッドがあります。私ので、私はスレッドセーフにしたいラッパー関数でそれをカプセル化している:私は、保存操作自体はにロックを引き起こして、バックグラウンドスレッドで発生するので[self saveToURL:...]
への呼び出しはすぐに復帰することを想定しています同期操作で@synchronizedを使用する
- (void)saveWithCompletionBlock:(void(^)(TransactionDocumentReturnCode status))completion {
@synchronized (self) {
[self saveToURL:[self fileURL] forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success){
// Generate returncode depending on outcome of save operation
completion(returncode);
}];
}
}
保存操作が完了する前に潜在的に解放されてください。だから、saveToURL
の完了ブロックが呼び出されるまで、saveWithCompletionBlock:
をブロックして他のスレッドをブロックする方法はありますか?
これを実装する2つの方法については、この回答をご覧ください:http://stackoverflow.com/a/7649768/78496 – chedabob
ありがとうございます@chedabob。 GCDまたはNSOperationQueueを使用すると、セーブ操作の完了ブロックが終了するまで、セーブラッパー関数への後続の呼び出しがブロックされますか? – mashers