热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS的ARC究竟是如何释放内存的?

最近在开发一个应用,无意间发现一个严重的内存泄漏问题:很简单,两个页面:主界面A管理一个tableView,点击后进入子界面B,B中是一个textView。然后我做了如下测试:假设te
最近在开发一个应用,无意间发现一个严重的内存泄漏问题:

很简单,两个页面:主界面A管理一个tableView,点击后进入子界面B,B中是一个textView。然后我做了如下测试:

假设textView中有5M的文本,那么,在每次由A进入B时,内存会增加大约5M;

但是!在由B退出到A时,内存并不会减少5M。。。

而且更离谱的时,当再次由A进入到B时,内存又在原先基础上叠加了5M,退出后依然不减!

这样造成的后果是,如果用户不断重复“进入->退出”“退出->进入”这个操作,那么内存占用量将以线性飞速增长,最终将导致泄漏!而且这个测试的5M还只是个保守值,若textView还含有图片,那么每次打开就得占用十几M甚至几十M,那这样来回几个操作后,内存已经直接飙升到几百M了。。。

我其实很想每次在B消失时手动释放各种文字和图片资源,但工程是ARC的

但关键问题是,为什么就算是ARC,会出现上述这个这么严重的问题?内存只增不减?

我无论是用模拟器还是用真机做上述测试时,应用都直接崩溃过几次(内存直接飙升到八九百M)

求大神指点其中的机理和解决办法 

3 个解决方案

#1


好高端,是不是你的写法有问题,垃圾回收机制弄了?

#2


是不是循环引用了?检查一下代码吧,最好加上指针为nil的代码看看?

#3


即使如此你的自动释放池呢?

推荐阅读
author-avatar
禾漾啊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有