我应该使用模型对象作为 NSUndoManager 的目标吗?



我对NSUndoManager方法有疑问

  • registerUndoWithTarget:selector:object:

  • prepareWithInvocationTarget:

通常在

示例中,"目标"是管理所有模型对象(通常在数组中)的控制器对象。

但是目标是否可以是单个模型对象 - 要通过撤消/重做操作更改的模型对象?


该指南说registerUndoWithTarget:selector:object:

目标对象可能不是状态正在更改的实际对象;相反,它可能是客户端对象,即包含许多可撤消对象的文档或容器。

为什么会有这个限制?方法本身的文档中未提及它。此外,对于prepareWithInvocationTarget:方法,也没有提到此类限制。

你引用的文档有点模棱两可。我会读到这个:

目标对象可能不是状态为 改变;相反,它可能是客户端对象、文档或 包含许多可撤消对象的容器。

如:

目标对象可能不是状态为 改变;相反,它可能是客户端对象、文档或 包含许多可撤消对象的容器

但是,通常最好不要使用模型作为目标。目标不会保留,因此可以在撤消堆栈上仍引用时将其解除分配。以拥有撤消管理器的控制器为目标是一个好主意。

相关内容

  • 没有找到相关文章

最新更新