Я использую подкласс UIDocument, у которого есть потенциал, чтобы его метод saveToURL
вызывался из более чем одного потока. Поэтому я инкапсулировал его в функцию-оболочку, которую я хочу сделать потокобезопасной:
- (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
?