iOS优化内存,提升性能 之三

发布时间:2020-06-23 01:16:30 作者:iKingLai
来源:网络 阅读:975

高级内存主题


现在你已经学会了基本的内存管理技术,我讲介绍一些高级内存主题。


Retain/Relationship生命周期


在旧的内存管理世界中,如果对象A拥有对象B,当对象Adeallocated时,对象A必须release对象B。但是,如果对象A拥有对象B,对象B又拥有对象A,会发生什么呢?


你可以通过调用release方法,然后把引用设置为nil来release对象A。但是,因为对象B仍然拥有对象A,对象A的引用计数大于0。当你release对象B的时候同样如此;它的引用计数仍然大于0,因为对象A仍然拥有对象B。


类似这样的引用,任何对象都不会被deallocated,如图7-4展示的那样。


iOS优化内存,提升性能 之三


对于新的ARC机制,这种引用依然存在,如果你有两个对象互相之间有强引用,两个对象都会泄露。


因此,如果你想两对象彼此应用,你需要怎么做呢?你需要使用弱引用。


弱引用


iOS优化内存,提升性能 之三

因此,为了避免循环引用,只有对象A持有对象B的强引用,对象B只持有对象A的弱引用。


UIViewController


所有的iPhone应用都要用到UIViewController(要不然你在哪里显示UI?)。因此,理解UIViewController的生命周期能够帮助你很多重要的事情,例如:


在教学和培训的时候,我发现很多开发者对view controller存在严重的误解,他们并没有理解view controller的生命周期。在iPhone环境中,有一些主要的管理过程来控制view controller对象的生命周期,例如:


加载view的过程


当一个view controller请求它的view的时候,它会检查view是否已经加载到内存中。如果没有,会加载它然后viewDidLoad方法会被调用。图7-6显示了加载view的过程。


iOS优化内存,提升性能 之三

在加载view的过程中,你需要记住一些性能方面的问题:


卸载view的过程


对于内存和性能来说,这个过程是非常重要的。主要原因是当你的应用有内存警告和需要回收内存时,这个过程依然在运行。在这个过程中,didReceiveMemoryWarning方法首先被调用,然后viewDidUnload方法被调用。在屏幕上显示的views不会被卸载。在图7-7中你可以看到这个过程。


iOS优化内存,提升性能 之三

在卸载view的过程中,有很多内存和性能方面的问题你需要记住:



注意:当你重写加载view的方法时,如init,loadView和viewDidload,必须先调用父类的方法。但是,如果你重写清除方法,如didReceiveWarning,viewDidUnload或dealloc,调用父类的方法必须在方法的尾部。



在viewDidUnload方法中有一些开发者感到很迷惑的东西。



推荐阅读:
  1. MySQL优化之三:SQL语句优化
  2. 新课程上线:Oracle数据库11gR2(之五):性能调优

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ios 性能优化

上一篇:SQLPS不同版本的差异

下一篇:jmeter学习指南之Beanshell Sampler 常用方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》