我想在我的NSDocument中实现异步保存。根据文档,我需要在canAsynchronouslyWriteToURL:ofType:forSaveOperation:
中返回YES,然后在写作期间的某个时间调用unblockUserInteraction
。
在我的文档中,只需返回一个NSFileWrapper即可由fileWrapperOfType:error:
执行编写。
- (NSFileWrapper*) fileWrapperOfType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
return self.myMutableFileWrapper;
}
关于这一点,文档说:
例如,fileWrapperOfType的默认实现:error: 在创建要返回的NSFileWrapper对象时调用[unblockUserInteraction]。 假设NSFileWrapper未被后续用户变异 动作,它实际上是文档内容的“快照”, 一旦创建,就可以安全地继续处理用户事件 主线程,即使其中一些用户事件可能会发生变化 NSFileWrapper对象之前的文档内容 写得安全。
目前我的代码self.myMutableFileWrapper
可以在fileWrapperOfType:error
后更改,因此我不能认为它不会像文档中所说的那样发生变异。
这是否意味着我应该修改fileWrapperOfType:error:
来制作文件包装器的副本,然后调用unblockUserInteraction
?像这样:
- (NSFileWrapper*) fileWrapperOfType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
NSFileWrapper *copyFileWrapper = MakeACopyOf(self.myMutableFileWrapper);
[self unblockUserInteraction];
return copyFileWrapper;
}
如果以上是正确的,我如何制作NSFileWrapper的副本?另外,不制作潜在巨大的NSFileWrapper副本会否定异步保存的性能优势吗?