Я делаю следующее:
Path2D *pathToRemove = [path copy];
[[[self undoManager] prepareWithInvocationTarget:self] removePath:pathToRemove atIndex:index];
[pathToRemove autorelease];
У меня также есть кнопка очистки, которая делает:
[undoManager removeAllActions];
Проблема в том, что removeAllActions вылетает в приложение. Когда я удалил [pathToRemove autorelease], он работал (или, по крайней мере, не падал. Это все еще может быть утечка памяти). Я предполагаю, что предположил, что undoManager сохранил pathToRemove при передаче в вызове prepareWithInvocationTarget.
Разве это не так? Если это не так, то сбой может произойти, потому что вызов removeAllActions освобождает объект PathToRemove. Но это будет означать, что это ошибка в NSUndoManager, которая крайне маловероятна.
Я могу сказать, что моя реализация copyWithZone, скорее всего, также не является виновником, поскольку выходные данные NSLog для '[pathToRemove description]' и '[path description]' показывают разные адреса, как и ожидалось.
Любая помощь будет оценена. Спасибо.