NSUndoManager メソッド prepareWithInvocationTargetは引数を保持しません。Apple docs にはこれへのリンクはありませんが、プロファイラーで確認しましたが、そうではないと確信しています。これは、オブジェクトを削除して元に戻す準備をする場合は、自分で保持する必要があることを意味します (ごみ箱配列に割り当てて元のリンクを削除するなど)。この種の偽の削除は、特に古い取り消しを削除する必要がある場合に、多くの不必要な騒ぎを引き起こします。
ただし、NSInvocationは、 retainArguments メソッドを呼び出すことで引数を保持できます。NSUndoManager は prepareWithInvocationTarget に NSInvocation を使用するため、retainArguments を NSUndoManager に渡す方法である可能性があります。
問題は - どうやってそれを行うのですか?