iOS内存管理经验之谈


1.引用计数加减要弄清楚,不能多释放,少释放,不释放,打印对象的引用计数真心不丢人。


2.手动管理内存时,某些方法生成的对象无需手动释放内存,多释放会崩溃。


3.哪里引用,哪里释放,不能提前释放(过度释放引发崩溃),可以延后释放,不能不释放(内存泄漏)。


4.一个指针重定向的时候,一定是先释放,再赋空,最后重定义(否则,有内存泄漏的风险)。


5.在复杂情况下,善于利用好autorelease,    @autoreleasepool {},以及ARC,这三者必然能够优化你原来的内存管理。


6.大量数据加载时,要善于利用多线程,lazyLoading,单例模式等编程技巧,有利于快速写出高质量内存管理代码。


7.两个controller之间交互数据,注意接口传参的规范,以及释放的先后顺序


8.(与6,7相关)用好sqlite3 和NSUserDefaults类,你写代码的时候就会有N多的处理方法。另需注意KeyChain,以及sqlite3 事务的用法,多学一些复合sql语句吧,有时候一条好的sql比得上你自己在数据库外做N多的操作。sqlite3在app生命周期中必须用单例(节省内存),用不好不要自己写,用别人写好的框架吧。


9. controller生命周期中,所有对象的释放顺序必须注意,遵循谁先申请,谁后释放的原则,否则bug多多


10.单例模式下,必须注意属性的全局性,否则导致内存泄漏或者不释放。单例模式下要注意属性尽量不用(retain),否则内存泄漏。


11.指针闲置的时候,如无必要,先释放,再指空,减少内存用量。


12.内存警告时,呵呵,作处理总比不处理好。  iOS3-iOS5.0以前版本收到内存警告,会将controller的view进行释放,所以不能再次释放。而ios6以上只是释放controller的resouse,不会释放view。搞版本兼容的时候要注意对应的处理方法!


13.webKit ,即,UIwebView cacheSizeMemory 在内存处理的时候,内存释放有问题(API的问题,暂时无解)。在项目使用UIwebView时,慎重考虑内存问题,暂无较好解决方案,但推荐单例模式,或者,在把cacheSizeMemory 设置成为SharedURLCache,即[NSURLCache setSharedURLCache:cache];另外在内存警告的时候,一定要注意清理缓存。


14.做有全局级别的控件页面的时候,构建页面样式,UIView的高级接口(QuartzCore,OpenGL 等)要比多个UIView使用低级接口拼接而成省时间和内存,加载的时候效率更高。


15.再好的内存优化工具都不能完美的解决你隐性的内存问题,但你用好过不用(除非你特别自信),但是要好好分析你自己的内存管理问题,努力提升自己的代码管理能力


16.ARC和非ARC孰优孰劣不予评价。推荐赶项目的时候推荐ARC,自己精雕细琢代码时最好手动管理。当然,在混合管理项目中协调好ARC 和非ARC代码,保证你的project的稳健性是你的必备能力之一。


17.与别人合作时,在你整理接口的时候,注意别人使用你代码,参数在ARC条件下和非ARC条件下的管理方法。开源项目是同样的道理。虽然你开源了很伟大,很值得别人学习,但是,努力做到最好才是高级程序员的素养。毕竟,在开源社区别人指出你代码的bug时,脸面毕竟不好看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值