gpt4 book ai didi

objective-c - 撤消和对象释放

转载 作者:行者123 更新时间:2023-12-03 17:00:55 29 4
gpt4 key购买 nike

新手问题。

我有一个 NSMutableArray,它保存多个对象(存储 Bezier 路径和相关变量的对象,例如路径颜色等)。每当调用相关的 -dealloc 方法时,这些对象都会正确释放。每个对象都使用 +alloc/-init 实例化并添加到数组中。将它们添加到数组后,我释放对象,因此它们的retainCount = 1(由于数组)。因此,当数组被释放时,对象也被正确地释放

但是,我还实现了一种撤消/重做机制,可以从 NSMutable 数组中删除/添加这些对象。

我的问题是,当撤消从数组中删除对象时,它们不会被释放(否则重做将不起作用),所以如果重做从未被调用,如何正确释放这些对象?

希望这是有道理的!谢谢!

最佳答案

您不需要保留对正在使用的对象的引用。当您向撤消堆栈添加操作时(请参阅 NSUndoManager registerUndoWithTarget:),它将为您保留参数。例如,如果您在代码中使用 addObject:(id)obj 添加一个对象,您将使用您的removeObject:操作和 obj 作为参数向 NSUndoManager 注册它。撤消管理器将保留该对象,直到该操作从撤消堆栈中清除。如果您在对象中重写 dealloc 并放入 NSLog() 消息,您将确切地看到它是如何工作的。

如果您没有使用 NSUndoManager,请开始!它使得在 OS X 中获得正确的撤消管理变得非常容易,而且非常灵活。

关于objective-c - 撤消和对象释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/370265/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com