gpt4 book ai didi

ios - 带有 CFNotificationCenter 强引用的 UIViewController 不会发布

转载 作者:行者123 更新时间:2023-12-04 15:10:50 25 4
gpt4 key购买 nike

我有一个 View Controller ,一旦它的父 View Controller 从 View 层次结构中删除并被释放,它就永远不会被释放。它在内存图中的每个实例看起来都一样,因为它有一个对 CFNotificationCenter 的引用。 .看起来不同类的其他不相关的 View Controller 都有相同的引用,但仍然被释放。有问题的 View Controller 也没有任何 NotificationCenter观察者所以这对我来说毫无意义。
我附上了一张内存图的图像,其中包含了已编辑的 View Controller 的真实名称。我也确定这是 View Controller 的完整图形,我没有选择检查单个引用。
The confusing memory graph
这里发生了什么?为什么不发布?

最佳答案

您可以准确地看到哪些代码正在引用您的 View Controller :
首先,为您的方案打开 Malloc Stack Logging(使用 Cmd-Shift-打开方案编辑器)Screenshot of the Xcode Scheme editor
然后,单击指向您的 View Controller 的“malloc”块,并将鼠标悬停在 Backtrace 的右侧以找到“扩展”按钮以查看完整的堆栈跟踪:
Screenshot of the Xcode memory graph debugger
然而,最可能的罪魁祸首实际上不是通知保留了您的 View Controller ,因为引用不强(否则它将是 粗体 箭头)。
当对象保留自身时,Xcode 内存图调试器不会向您显示。就我而言,这是一个简单的保留 self 的案例。在我的 viewDidLoad 中关闭.

关于ios - 带有 CFNotificationCenter 强引用的 UIViewController 不会发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65240720/

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