gpt4 book ai didi

objective-c - 对当前线程调用堆栈上的对象调用release

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

我是 cocoa 的新手,因为我正在编写 cocoa 应用程序,所以我总是很困惑如何释放一个对象来告诉它的委托(delegate)我已经完成了。听者尝试释放它。

所以我有一个AppController,它为updateCheckWindowController提供午餐,并且还充当它的委托(delegate),以便当updateCheckWindow结束时它可以采取进一步的操作(在我的例子中释放它)。 UpdateCheckWindowController 在窗口结束时调用委托(delegate),以便该调用转到 AppController 的方法,该方法尝试释放调用对象 updateCheckWindowController。

由于 AppController 是唯一保留它的对象,因此调用释放应该会销毁 updateCheckWindowController ,但 updateCheckWindowController 对象当前位于 callStack 上,因为它是调用 AppController 上的委托(delegate)方法的对象,并且 AppController 尝试释放它。这是一种循环调用

它在 Objective-C 中如何工作?这看起来是一个非常糟糕的模式,不像有一个公平的理由。还是我的做法不正确?

最佳答案

您的判断可能是正确的,可以使用更好的模式来完全避免循环调用。

如果你有一个 View Controller ,它只显示很短一段时间,然后在关闭时应该释放,你可以使用 UIViewController 的这个方法:

presentViewController:动画:完成:

您可以在呈现之前自动释放正在呈现的 View Controller 。调用该方法将保留它。当 Controller 应该被关闭时,它可以告诉它的委托(delegate),委托(delegate)可以调用

dismissViewController:动画:完成。

当委托(delegate)解除它时,它将被释放。

是这样的情况还是更复杂?

关于objective-c - 对当前线程调用堆栈上的对象调用release,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17631235/

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