Iphone iOS-内存管理:这些内存都到哪里去了?

Iphone iOS-内存管理:这些内存都到哪里去了?,iphone,objective-c,ios,memory-management,Iphone,Objective C,Ios,Memory Management,我有一个相当基本的应用程序,我正在更新-作为更新的一部分,我正在实施内存警告管理 当调用内存警告方法时,我会释放任何未使用的视图控制器,而这些视图控制器又会释放它们的任何对象。就我所知,一切似乎都很好,没有泄漏等 什么不起作用: 使用“分配”工具,在调用模拟硬件警告时,有大量内存没有被释放。以下是我在测试时所做的: 1-启动应用程序-这是下面显示的原始内存跳转 2-添加新的视图控制器-这是第二个峰值 3-返回主视图控制器并模拟硬件内存警告-这是即将结束时内存的小下降。此警告应完全释放其他视图控制

我有一个相当基本的应用程序,我正在更新-作为更新的一部分,我正在实施内存警告管理

当调用内存警告方法时,我会释放任何未使用的视图控制器,而这些视图控制器又会释放它们的任何对象。就我所知,一切似乎都很好,没有泄漏等

什么不起作用:

使用“分配”工具,在调用模拟硬件警告时,有大量内存没有被释放。以下是我在测试时所做的:

1-启动应用程序-这是下面显示的原始内存跳转

2-添加新的视图控制器-这是第二个峰值

3-返回主视图控制器并模拟硬件内存警告-这是即将结束时内存的小下降。此警告应完全释放其他视图控制器和关联对象

虽然所有的东西都被释放了,但仍然有很多内存。据我所知,它就像iOS的缓存动画一样。然而,在真正的内存不足的情况下,应该释放它,而不是停留在这里,因为这是大部分内存的所在

如何释放这种记忆?或者我做错了什么?任何指点都将不胜感激-谢谢

-

编辑:感谢所有到目前为止的答案!虽然不幸的是我还没能解决这个问题。此外,只有在使用模态视图控制器时,才会出现内存奇怪的情况

我注意到,我实际上有一个在应用程序启动时调用的额外视图控制器的后台加载方法,以使事情顺利运行。这表明内存中的第二个峰值完全是由于视图控制器的其他原因造成的-可能是动画还是其他原因?不管怎样,问题仍然存在——这个额外的内存是用来做什么的,当我需要的时候,我如何释放它


如果有帮助的话,我可能会创建一个展示这种行为的小型项目。谢谢:

您真的确定没有保留UIViewController或其对象吗?释放控制器后,您不必模拟内存警告来查看分配的减少。 我附上了一个屏幕截图,显示了我的应用程序在使用UINavigationController按下并弹出UIViewController三次后的外观

编辑


回答您的评论:UIViewController属于UIKit,并且不是线程安全的,这意味着您不应该在后台线程中创建一个。这可能是内存泄漏的潜在原因,因为它不会添加到主自动释放池。

您真的确定没有保留UIViewController或其对象吗?释放控制器后,您不必模拟内存警告来查看分配的减少。 我附上了一个屏幕截图,显示了我的应用程序在使用UINavigationController按下并弹出UIViewController三次后的外观

编辑


回答您的评论:UIViewController属于UIKit,并且不是线程安全的,这意味着您不应该在后台线程中创建一个。这可能是内存泄漏的潜在原因,因为它不会被添加到主自动释放池中。

有一个关于使用WWDC 2010中的仪器进行内存分析的非常棒的屏幕广播。这就是我学会如何跟踪类似问题的原因


你应该退房。具体来说。

有一个关于使用WWDC 2010中的仪器进行内存分析的非常棒的视频。这就是我学会如何跟踪类似问题的原因


你应该退房。具体来说。

谢谢你的回答。我对内存的管理稍有不同,因此UIViewController会一直存在,除非在内存不足的情况下需要将其清除,否则视图的状态会尽可能保留下来。另外,我并不是在推控制器,而是在展示一个模态视图。我做了一些实验,这似乎只是模态视图,而不是推/弹出。也许我做事的方式有问题?谢谢你的回答。我对内存的管理稍有不同,因此UIViewController会一直存在,除非在内存不足的情况下需要将其清除,否则视图的状态会尽可能保留下来。另外,我并不是在推控制器,而是在展示一个模态视图。我做了一些实验,这似乎只是模态视图,而不是推/弹出。也许我做事的方式有问题?谢谢!听起来这可能真的很有帮助,等我有空的时候再看。谢谢!听起来这可能真的很有帮助,等我有空的时候再看一遍。