Saya menggunakan subkelas UIDocument yang berpotensi memanggil metode saveToURL
dari lebih dari satu utas. Oleh karena itu saya telah merangkumnya dalam fungsi pembungkus yang saya ingin buat agar thread aman:
- (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);
}];
}
}
Saya berasumsi bahwa panggilan ke [self saveToURL:...]
akan segera kembali karena operasi penyimpanan itu sendiri terjadi di thread latar belakang, menyebabkan kunci berpotensi dilepaskan sebelum operasi penyimpanan selesai. Jadi, apakah ada cara untuk menjaga thread lain yang memanggil saveWithCompletionBlock:
diblokir sampai blok penyelesaian saveToURL
dipanggil?