gpt4 book ai didi

iphone - UIViewController 在 dealloc 时不释放 subview (使用 ARC)

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

我对 UIViewController 有一个奇怪的(非?)问题。似乎 Controller 在被释放时没有释放其 subview 。我将 NSLog 消息放置在所有 subview 的 dealloc 方法以及 View Controller 中。 View Controller dealloc 被调用,但 subview 没有。但是,如果我随后将该 View Controller 的另一个实例推送到导航堆栈,则似乎前一个实例的所有 subview 随后都被释放(我在控制台中收到一堆 NSLog 消息让我知道)。我已经检查过了,并且我没有单独引用呈现 View Controller (正在执行推送的 View Controller )中的自定义 View Controller 。

一个小(也许)细节:自定义 View Controller 确实接收到它存储的 block ,然后在弹出之前执行。但是,我确实向它发送了 nil 并且我得到了相同的行为。另外,当前 View Controller 在弹出堆栈时会释放,因此没有保留周期。

此外,我确实尝试在自定义 View Controller 的 dealloc 方法中显式释放每个 View 。相同的行为。

导航 Controller 有可能会坚持下去吗?它似乎对我的任何其他 View Controller 都没有这样做。

我的问题是这确实代表了内存泄漏(所有这些 subview );尽管泄漏不会叠加,但它仍然是泄漏。

最佳答案

好吧,这很尴尬。我确实在我无意中用作集合类的另一个类(称为 ViewDef)中发现了问题。当我第一次弄清楚一些动画时(几个月前),这是一种快速而肮脏的方式来跟踪我的 subview 。 ViewDef 存储从数据库中检索的帧/字体/颜色/等信息,因此在确定动画(方向之间)时也可以方便地存储 View 。这些 ViewDef 由我的模型存储并传递,所以当然 View 也被保留(稍后被另一个 View Controller 替换)。无论如何,我忘了在我的代码中插入一个警告,以便稍后解决这个问题。

故事的寓意:如果你打算做一些愚蠢的事情,至少记录下你的愚蠢,这样你以后就不必在互联网上传播它了。

关于iphone - UIViewController 在 dealloc 时不释放 subview (使用 ARC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8853368/

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