iPhone内存处理小结.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
iPhone内存处理小结 by Doors.Du on 2009-11-19 我们做的是手机开发,在这种资源紧张的设备上开发应用,请时刻提醒自己,“你申请的那块内存释放了吗?” 1. Leaks工具 没有人比苹果更了解自己,使用X-Code集成的Leaks工具帮助你跟踪内存是一个不错的选择。也许它有时候不能准确的告诉你哪里泄露了,也许有时候它找到了你解决不了的泄露,也许有时候它找不到存在的泄露现象。但要记住的有三点,第一就是它找到的是对的;第二是它能帮你节省时间,第三,它是在运行时检查的,你不执行到某些代码,是检查不到的。 例如: -(IBAction)btnPressed { NSString* s = [[NSString alloc] initWithFormat:@%d, year]; if (...) { if (...) { ... } else { ... } } else { ... } [s release]; } 看起来是没什么问题,假设这个函数有100多行,其中任意一个分支或多个分支return了,结果是什么,Leak。这个时候如果用你那本来就很疲累的眼睛去分析代码,恐怕将会大大加快你告别计算机的速度。 2. 熟悉Objective-C ObjC是一种牺牲了一定的安全性和执行效率来换取简洁的编码风格的计算机语言。熟悉掌握它的特性是帮你提高代码质量的不二法门,正所谓“知己知彼,百战不殆”,使用前了解它,用时间测试它,等你觉得它可以称为你的朋友时,信任它并使用它。 @property (assign) @property (retain) @property (copy) 这三个属性很容易给工程带来麻烦,使用前搞清楚它们分别是干什么的,assign表示生成的设置方法不会retain入参,内存引用计数不增加;retain属性表示系统生成的设置方法会将入参retain一次,内存引用计数加1,在通过设置器或者点操作符为这种对象赋值后要将入参或者等号右值release以保证引用计数能在你不需要使用这块内存的时候变为0并交给系统收回它;copy属性是深拷贝,它会将入参的地址复制一份,调用设置器对这种属性的成员赋值后,入参或者等号右值可以释放或者修改,对已经经过赋值的成员属性没有影响。 3. 高质量的设计 个人认为,设计决定着一个工程的完成质量,长着双手会写代码的程序员全世界多的是,但象Linux等优秀的设计却在全宇宙都找不到几个。世界上没有完美的东西,但我们必须要让自己手上出来的东西更趋近于完美。 每个对象负责解决自己所获得的空间,每个变量在自己的生命域内要释放自己的空间。因此,好的设计要把接口之间的衔接,参数之间的传递设计好,不然,内存泄露的问题必将困扰着你,并且会使得代码的耦合性增加。 4. 相信自己验证过的事情 相信会写代码而不会打字的程序员应该不存在于这个世界,论坛、书籍上教程、秘籍一大堆,不能盲从这些,尤其是论坛中提出的概念,源码要取回来编译调试,文字教程要亲自编写测试代码去验证。不然你也许真的永远不会懂。 AutoRelease池是一个很好的证明,书上说了,Autorelease的对象会在返回之后释放,于是我们大量使用了这种方式,结果呢,后来又有书本描述说,这种对象是在AutoRelease池释放的时候才会被释放。心里大惊,试想,这么多的自动释放对象在我们的工程中,这将占用多少内存,赶忙查看代码,寻找传说中的AutoRelease池,发现在main方法里,在我们的UI被执行之前创建,在我们的UI退出之后被释放,几乎失去了意义,于是更多嵌套的AutoReleasePool才出现在代码中。 5. SDK文档是最好的帮手 SDK文档也是官方出的资料,可以当作是某个框架的自传,不愿意让人了解到或者不太好的东西是不会写出来的,那我们也不要使用。 NSArray* ay = [[NSArray alloc] initWithObjects:@1, @2]; 不要问为什么你的应用程序里面就这一句话怎么挂了,SDK上面写的很清楚,ending with nil。如果没有nil作为数组的结尾,你的程序只要执行了这一行代码,一定会挂。 6. 好记忆不如烂笔头 遇到新知识,当时弄清楚了要记下来,当时没弄清楚也要记下来,将来再慢慢弄。多写代码,代码写多了自然就有印象了。

文档评论(0)

ktj823 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档