我执行以下操作:
Path2D *pathToRemove = [path copy];
[[[self undoManager] prepareWithInvocationTarget:self] removePath:pathToRemove atIndex:index];
[pathToRemove autorelease];
我还有一个清除按钮:
[undoManager removeAllActions];
问题是 removeAllActions 使应用程序崩溃。当我删除 [pathToRemove autorelease] 时,它起作用了(或者至少没有崩溃。它仍然可能是内存泄漏)。我想我假设 undoManager 在传入“prepareWithInvocationTarget”调用时保留了“pathToRemove”。
不是这样吗?如果不是这种情况,则可能会发生崩溃,因为对“removeAllActions”的调用正在释放“PathToRemove”对象。但这意味着它是 NSUndoManager 中的一个错误,这是极不可能的。
我可以说我的 copyWithZone 实现也不太可能是罪魁祸首,因为 '[pathToRemove description]' 和 '[path description]' 的 NSLog 输出按预期显示不同的地址。
任何帮助,将不胜感激。谢谢。