当前位置:  开发笔记 > IOS > 正文

iPhone内存管理确实收到了内存警告

如何解决《iPhone内存管理确实收到了内存警告》经验,为你挑选了1个好方法。

好......

我正在iPhone上实现一个简单的OpenGL ES应用程序,最近我在Pinch Media Analytics中添加了这个应用程序.这样做有助于发现内存管理问题,我不完全确定如何处理它.

在一个完美的世界中,我的应用程序 - 在didFinishLoading中加载PNG和.CAF文件将启动,加载它的所有资源,并运行得很好.

但是,如果我的程序崩溃(这是因为我正在集成Pinch Media库)或者如果我运行Safari并打开一堆页面然后启动我的游戏,游戏将崩溃回到菜单,因为它已经没有了记忆.

在我对系统进行硬重置之前,此问题将持续存在.

你上网的默认答案是实现下面列出的didReceiveMemoryWarning方法....

- (void)didReceiveMemoryWarning
{ 
  // default behavior is to release the view if it doesn't have a superview.

  // remember to clean up anything outside of this view's scope, such as
  // data cached in the class instance and other global data.
  [super didReceiveMemoryWarning];
}

但这并没有真正帮助,因为它是其他程序,而不是我的记忆.我不想发布自己的观点吗?是否有很好的描述如何处理这种情况和/或didReceiveMemoryWarning事件中发生的事情?



1> Rob Napier..:

欢迎来到没有VM的共享内存池......你可以在这里做很多事情,但有一些事情(这可能是你的错,你可以完全解决它).游戏开发人员经常建议他们的客户在运行之前重新启动,因此如果您真的需要大量内存才能生效,那么您可能需要在同一条船上.

当然,您应该尽量减少自己的内存占用.但是你也应该尽量避免过多的内存碎片.有时问题不在于没有记忆; 没有足够大的块.有时最好使用Mutable并继续修改它而不是生成一个新的不可变对象.对于大型NSStrings来说尤其如此,这可能真的会浪费内存.

请记住,UIImage +imageNamed:在释放图像后会保留图像,所以如果您不再需要它们,则需要清除它们.在释放它之前将其名称设置为nil以停止缓存.

确保在"仪器"下运行您的应用程序.你可能正在吃比你想象的更多的记忆.

不要忘记自动释放池.如果在单个事件循环中生成大量自动释放的对象,则可能需要定期耗尽池,以免引发内存.内存峰值可能导致具有适度内存要求的程序突然被杀死.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有