NSUndoManager 方法 prepareWithInvocationTarget不保留参数。Apple docs 中没有指向此的链接,但我已经使用分析器进行了检查,我很确定 - 它没有。这意味着如果您要删除一个对象并准备撤消 - 您应该自己保留它(例如将其分配给某个垃圾数组并删除原始链接)。那些虚假的删除会造成很多不必要的麻烦,尤其是当您需要摆脱旧的撤消操作时。
但是,NSInvocation可以通过调用 retainArguments 方法来保留参数。由于 NSUndoManager 将 NSInvocation 用于 prepareWithInvocationTarget,因此它可能是将 retainArguments 传递给 NSUndoManager 的方式。
问题是 - 怎么做?