我正在使用一個UIDocument子類,它有可能從多個線程中調用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);
}];
}
}
我假設調用[self saveToURL:...]
會立即返回,因爲本身發生在後臺線程保存操作,導致鎖在保存操作完成之前可能被釋放。那麼,有沒有辦法讓其他線程調用saveWithCompletionBlock:
被阻止,直到saveToURL
的完成塊被調用?
看看這個答案有兩種實現方法:http://stackoverflow.com/a/7649768/78496 – chedabob
謝謝@sedabob。使用GCD或NSOperationQueue會導致對保存包裝函數的後續調用被阻塞,直到保存操作的完成塊完成? – mashers