ฉันกำลังใช้คลาสย่อย UIDocument ที่มีศักยภาพมีเมธอด saveToURL
ที่ถูกเรียกจากมากกว่าหนึ่งเธรด ดังนั้นฉันจึงสรุปมันไว้ในฟังก์ชัน wrapper ซึ่งฉันต้องการทำให้เธรดปลอดภัย:
- (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
หรือไม่