2

我想在我的 NSDocument 中实现异步保存。根据文档,我需要返回 YES ,canAsynchronouslyWriteToURL:ofType:forSaveOperation:然后unblockUserInteraction在写作期间调用。

在我的文档中,写入是fileWrapperOfType:error:通过简单地返回一个 NSFileWrapper 来执行的。

- (NSFileWrapper*) fileWrapperOfType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
    return self.myMutableFileWrapper;
}

关于这一点,文档说:

例如,fileWrapperOfType:error: 的默认实现在创建要返回的 NSFileWrapper 对象时调用 [unblockUserInteraction]。假设 NSFileWrapper 没有被后续的用户操作改变,它实际上是文档内容的“快照”,一旦它被创建,它就可以安全地在主线程上继续处理用户事件,即使其中一些用户事件可能在安全写入 NSFileWrapper 对象之前更改文档的内容。

目前在我的代码self.myMutableFileWrapper中可以更改 after fileWrapperOfType:error,所以我不能假设它不会像文档所说的那样发生突变。

这是否意味着我应该修改fileWrapperOfType:error:以复制我的文件包装器,然后调用unblockUserInteraction?像这样的东西:

- (NSFileWrapper*) fileWrapperOfType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
    NSFileWrapper *copyFileWrapper = MakeACopyOf(self.myMutableFileWrapper);
    [self unblockUserInteraction];
    return copyFileWrapper;
}

如果以上是正确的,我如何制作一个 NSFileWrapper 的副本?此外,制作一个可能巨大的 NSFileWrapper 的副本不会否定异步保存的性能优势吗?

4

0 回答 0