NSUndoManager是否保留对象?
我做以下事情:
Path2D *pathToRemove = [path copy];
[[[self undoManager] prepareWithInvocationTarget:self] removePath:pathToRemove atIndex:index];
[pathToRemove autorelease];
我还有一个清晰的按钮:
[undoManager removeAllActions];
问题是removeAllActions崩溃了应用程序。当我删除[pathToRemove autorelease]时,它工作(或者至少没有崩溃。它仍然可能是内存泄漏)。我想我假设当在“prepareWithInvocationTarget”调用中传递时,undoManager保留了“pathToRemove”。
那不是这样吗?如果不是这种情况,则可能发生崩溃,因为对'removeAllActions'的调用正在释放'PathToRemove'对象。但这意味着它是NSUndoManager中的一个错误,这是不太可能的。
我可以说我的copyWithZone实现不太可能是罪魁祸首,因为'[pathToRemove description]'和'[path description]'的NSLog输出显示了预期的不同地址。
任何帮助,将不胜感激。谢谢。
没有找到相关结果
已邀请:
2 个回复
碧肮械淌设
方法不保留传递给它的参数。从
文档中可以看出,它只是捕获了
,然后重放它。除非特别要求,否则
objects不会将对象保留在其参数中。 这并没有完全解释崩溃,因为
应该清除撤销堆栈而不对对象做任何事情。 希望这有助于一些人追踪崩溃的来源。
坝镰补翔奋
然后将堆栈清除到指定的方法: