я сделать следующее:Сохраняет ли NSUndoManager объекты?
Path2D *pathToRemove = [path copy];
[[[self undoManager] prepareWithInvocationTarget:self] removePath:pathToRemove atIndex:index];
[pathToRemove autorelease];
У меня также есть четкие кнопки, что делает:
[undoManager removeAllActions];
Проблема заключается в том, что removeAllActions сбой приложения. Когда я удалил autorelease [pathToRemove autorelease], он работал (или, по крайней мере, не сбой. Он все равно может быть утечкой памяти). Я предполагаю, что я предполагал, что undoManager сохранил «pathToRemove» при передаче в вызове «prepareWithInvocationTarget».
Это не тот случай? Если это не так, то может произойти сбой, потому что вызов 'removeAllActions' освобождает объект PathToRemove. Но это будет означать, что это ошибка в NSUndoManager, которая маловероятна.
Я могу сказать, что моя реализация copyWithZone вряд ли станет виновником либо с выхода NSLog для '[описание пути], и [[описание пути] "показывают разные адреса, как ожидалось.
Любая помощь будет оценена по достоинству. Благодарю.
хорошо я понял это. «prepareWithInvokationTarget» ДОЛЖЕН сохранить свои аргументы. Моя проблема заключалась в том, что мой метод copyWithZone действительно был неправильным. У меня был объект, который не копировался и сохранялся только. Таким образом, когда «RemoveAllActions» выпустили объекты, и они вошли в их соответствующие методы Dealloc, выпуск этой переменной-члена, которая не была «скопирована», создала сценарий с двойной версией, что привело к сбою. Еще раз спасибо! – user482393 2010-11-23 07:08:34