iOS MRC手动内存管理 心得体会
2015-11-28 13:26
375 查看
iOS MRC手动内存管理 以下是自己调试出的经验
首先注意一点:
修改代码后clean工程是必须的,但还不够,还必须卸载手机上的app,否则会导致多次调用结果和预期不一致,本人就遇到了这怪事,调试了很久才得出这个结论,应该是Xcode的bug
最好以clean后第一次运行的结果为参考,有时候会有表现不一致的情况
进入正题:
iOS的内存管理是用引用计数的概念,当一块内存的引用计数为0时,才能被系统回收复用
这里有一个很重要的概念,属性,临时变量和内存
我们真正要关心的是内存,属性和临时变量的引用计数为0,并不代表内存会被释放回收,只有真正指向的内存计数为0,才能被回收;
所以就有了release和nil的区别
release和nil的区别:
release是将对象或者临时变量指向的内存引用计数-1,当为0的时候,可以真正释放内存,对象不能再继续使用,release能改同时变属性和临时变量的引用计数, strong和retain基本上表现一致
而nil是讲对象或者临时变量本身的引用计数-1,当计数为0时,内存并不会回收,而且对象还能继续调用,所以 = nil是个风险,当内存释放后还能继续调用,但所有属性都会被置为默认值
数组的情况:
数组内的对象会随着数组release而release
但是数组无论release多少次计数都不会为0,最后计数会变成一个无效数值,此时不能再继续调用它的方法
alloc和自动释放池的对象表现差不多
自动释放池的对象无论release多少次,都不会为0,直到pool drain,
当计数变为一个无效数值时不能继续调用它的方法
最后给大家一点建议:
在开发iOS时,mrc和arc混编的情况下,mrc对象很容易泄露,除非是独立的工具类;
在复用性且频繁clone的对象一定不要使用混编,一定会造成内存泄露,最好都改为一致的管理方式
arc方式坚决推荐
首先注意一点:
修改代码后clean工程是必须的,但还不够,还必须卸载手机上的app,否则会导致多次调用结果和预期不一致,本人就遇到了这怪事,调试了很久才得出这个结论,应该是Xcode的bug
最好以clean后第一次运行的结果为参考,有时候会有表现不一致的情况
进入正题:
iOS的内存管理是用引用计数的概念,当一块内存的引用计数为0时,才能被系统回收复用
这里有一个很重要的概念,属性,临时变量和内存
我们真正要关心的是内存,属性和临时变量的引用计数为0,并不代表内存会被释放回收,只有真正指向的内存计数为0,才能被回收;
所以就有了release和nil的区别
release和nil的区别:
release是将对象或者临时变量指向的内存引用计数-1,当为0的时候,可以真正释放内存,对象不能再继续使用,release能改同时变属性和临时变量的引用计数, strong和retain基本上表现一致
而nil是讲对象或者临时变量本身的引用计数-1,当计数为0时,内存并不会回收,而且对象还能继续调用,所以 = nil是个风险,当内存释放后还能继续调用,但所有属性都会被置为默认值
数组的情况:
数组内的对象会随着数组release而release
但是数组无论release多少次计数都不会为0,最后计数会变成一个无效数值,此时不能再继续调用它的方法
alloc和自动释放池的对象表现差不多
自动释放池的对象无论release多少次,都不会为0,直到pool drain,
当计数变为一个无效数值时不能继续调用它的方法
最后给大家一点建议:
在开发iOS时,mrc和arc混编的情况下,mrc对象很容易泄露,除非是独立的工具类;
在复用性且频繁clone的对象一定不要使用混编,一定会造成内存泄露,最好都改为一致的管理方式
arc方式坚决推荐
相关文章推荐
- iOS 蓝牙
- iOS开发中关于import头文件放置位置的tips
- ios开发必看的博客汇总
- {iOS} 出iOS越狱渠道ipa包的方法
- iOS 代码规范
- 在iOS设备上进行抓包
- iOS沙盒路径的查看和使用
- iOS 开发技巧收集整理
- IOS开发技术之合理利用类的类别
- iOS 禁止锁屏
- iOS在纯代码中使用AutoLayout添加约束
- (NO.00004)iOS实现打砖块游戏(二):实现游戏主界面动画
- (NO.00004)iOS实现打砖块游戏(二):实现游戏主界面动画
- (NO.00004)iOS实现打砖块游戏(二):实现游戏主界面动画
- iOS系统中应用程序间通信的方法及装置
- iOS开发-使用Storyboard进行界面跳转及传值
- (NO.00004)iOS实现打砖块游戏(一):素材的制作
- (NO.00004)iOS实现打砖块游戏(一):素材的制作
- (NO.00004)iOS实现打砖块游戏(一):素材的制作
- iOS自动布局之Autoresizing