Tôi hiện đang viết một số tập tin vào đĩa trong thread nền chỉ bằng cách gọiios ghi vào đĩa trên sợi nền
dispatch_async(my_queue,^{
[self writeToRoot:filename data:data];
};
- (BOOL)writeToRoot:(NSString *)path data:(NSData *)content
{
NSString *fullPath = [[self rootPath] stringByAppendingPathComponent:path];
NSString *pathWithoutFile = [fullPath stringByDeletingLastPathComponent];
BOOL directoryExists = [[NSFileManager defaultManager] fileExistsAtPath:pathWithoutFile];
if (!directoryExists) {
NSError *error = nil;
[[NSFileManager defaultManager] createDirectoryAtPath:pathWithoutFile
withIntermediateDirectories:YES
attributes:nil error:&error];
NSParameterAssert(error == nil);
}
return [content writeToFile:fullPath atomically:NO];
}
tôi đang làm điều này như vậy vì nó sẽ không chặn các chủ đề chính. Câu hỏi của tôi là làm thế nào để đảm bảo an toàn luồng. trong khi thao tác nền này đang được thực hiện, điều gì xảy ra khi tôi cố gắng đọc từ đĩa tệp bằng cách gọi:
[NSData dataWithContentsOfFile:fullPath];
Nội dung sẽ bị hỏng? HOẶC thao tác ghi sẽ khóa tệp và thao tác đọc sẽ đợi cho đến khi hoàn tất quá trình ghi?
Đây là giải pháp tôi đã sử dụng. Viết và đọc từ đĩa từ cùng một hàng đợi. Cảm ơn rất nhiều. – wjheng