在fileWrapperOfType中取消阻止用户交互

时间:2012-09-08 09:49:45

标签: macos cocoa osx-lion nsdocument nsfilewrapper

我想在我的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副本会否定异步保存的性能优势吗?

0 个答案:

没有答案