gpt4 book ai didi

ios - ARC 和 Storyboard 的内存问题

转载 作者:行者123 更新时间:2023-11-29 04:37:13 25 4
gpt4 key购买 nike

我正在开发的 iPad 应用程序出现内存问题:它只有 3 个 View Controller 和一个导航 Controller 。我使用 Push Segue 将 View Controller 从 A 交换到 B,然后使用 Push Segue 交换到 C,然后使用 popToRootViewController 指令再次交换到 A。

我已经在所有 View Controller 上实现了 didReceiveMemoryWarning,只是为了知道会发生什么: View B 已正确从内存中卸载,但 View C 似乎会复制自身并消耗内存!当我触发内存警告时,我可以看到几个 View C 正在回答...

它看起来不像循环保留,因为我声明所有 parent 引用都是弱引用,并且泄漏工具没有检测到任何泄漏,也没有检测到循环保留,但内存增加了。
当使用真正的 iPad 进行测试时,这会导致崩溃。

我能做什么?我可以在哪里看?是否可以要求导航 Controller 释放除当前屏幕上的对象之外的所有先前对象?

编辑:

在 View didload 中,我添加了一些观察者,如下所示:

 NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
[dnc addObserver:self selector:@selector(undoManagerDidUndo:) name:NSUndoManagerDidUndoChangeNotification object:undoManager];
[dnc addObserver:self selector:@selector(undoManagerDidRedo:) name:NSUndoManagerDidRedoChangeNotification object:undoManager];

这样做是否有可能使 dnc 在某处保留对 self 的保留引用?

最佳答案

如果您使用 ARC,则不必将它们归零。一旦不再有强指针指向它们,ARC 就会自动释放它们。我不知道有什么方法可以查看哪一个保留了它。可能有,但我已经看过但找不到方法。您应该删除所有 GestureRecognizers 和其他任何内容,以便它能够解除分配。

关于ios - ARC 和 Storyboard 的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10924586/

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