ARC ios中的内存压力

时间:2014-07-10 19:02:17

标签: ios objective-c memory-management automatic-ref-counting dealloc

我正在开发一个ipad应用程序。 只有从另一个视图推送视图没有弹出。在某些时候,应用程序因内存压力而终止。我使用Product - > Profile Instuments进行了调试。 在每个视图中都有很多分配的图像记录视频等,并且每个视图大约80-100mb正在分配,当它达到接近400 MB的应用程序崩溃时。

当视图消失时,有没有办法在ARC中分配内存? 我试过对象=无;但没有工作。

请帮助我,我在过去2天内搜索此内容。

工作流程 - >这是一个提交个人详细信息的应用 第一个视图从表格视图中选择一些数据 - 然后是面部视频记录 - 然后是身体视频记录 - 然后是房间视频记录 - 以及一些表格提交 - 最后上传视图

2 个答案:

答案 0 :(得分:2)

如果您正在加载图片,请执行以下操作: [UIImage imageNamed:@"myImage.png"];
然后,此图像的内存将不会被释放,因为imageNamed:会缓存图像。 此方法可用于显示一些小图标,头像等。 所以,如果你必须展示许多大图像,那么使用
UIImage *myImage = [UIImage imageWithData:[[NSBundle mainBundle] pathForResource:@"myImage" ofType:@"png"];
这将不会缓存图像,并且当该对象的保留计数等于0时,将释放内存。

除此之外,如果你以后只推动一个视图控制器而没有弹出它,那么视图控制器将永远不会被释放,并且总是在内存中占有一席之地,直到应用程序不会崩溃/被杀,或者直到ViewController持有它视图控制器不会被释放。

因此,如果不再需要它,请务必取消分配viewController(例如,如果它被推送则弹出它,或者如果它是以模态方式呈现则忽略它)然后显示你的下一个视图控制器。 / p>

答案 1 :(得分:0)

我假设你有一个导航控制器,你正在推动视图。如果是这样的话,如果您没有弹出视图,则不应该推送视图。基本上不使用导航控制器,只需在浏览UI时在视图控制器之间进行切换。使用presentViewController,选择你的过渡风格,使全屏的演示风格应该有效。