iOS的ARC究竟是如何释放内存的? 10
最近在开发一个应用,无意间发现一个严重的内存泄漏问题:很简单,两个页面:主界面A管理一个tableView,点击后进入子界面B,B中是一个textView。然后我做了如下...
最近在开发一个应用,无意间发现一个严重的内存泄漏问题:
很简单,两个页面:主界面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)
求大神指点其中的机理和解决办法 展开
很简单,两个页面:主界面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)
求大神指点其中的机理和解决办法 展开
2个回答
展开全部
额,你重复开空间了啊,开空间的时候做下判断,如果已经创建了,就不要在重复创建了
更多追问追答
追问
重复开空间?具体是指重复开辟那里的空间呢
B视图里面只有几个属性变量,而在ARC里面对属性变量的开辟和回收貌似不需要手动去管理吧?
追答
textView重复开空间了,因为tableView有重用机制,这个不用管,你只要在创建textView的时候,加一个是否为nil的判断就好了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询