android智能指针怎么用
本文小编为大家详细介绍"android智能指针怎么用",内容详细,步骤清晰,细节处理妥当,希望这篇"android智能指针怎么用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
其中要点:
1、智能指针引用计数框架原理:当父对象要引用子对象时,就对子对象使用强引用计数技术,而当子对象要引用父对象时,就对父对象使用弱引用计数技术,而当垃圾收集系统执行对象回收工作时,只要发现对象的强引用计数为0,而不管它的弱引用计数是否为0,都可以回收这个对象,但是,如果我们只对一个对象持有弱引用计数,当我们要使用这个对象时,就不直接使用了,必须要把这个弱引用升级成为强引用时,才能使用这个对象,在转换的过程中,如果对象已经不存在,那么转换就失败了,这时候就说明这个对象已经被销毁了,不能再使用了。
2、智能指针实现框架:由一个对象来提供引用计数器,但是这个对象不会去维护这个引用计数器的值,而是由智能指针来维护;具体说是,第一是要定义一个负责提供引用计数器的公共类,第二是实现相应的智能指针对象类;
3、android源码涉及RefBase,sp,wp
(1)强引用与弱引用计数
RefBase中有一个隐含的对象,该对象内部有强弱引用计数。
sp化后,强弱引用计数各增加1,sp析构后,强弱引用计数各减1
wp化后,弱引用计数加1,wp析构后,弱引用计数减1
强引用为0,导致实际对象被delete
弱引用为0,将导致隐含对象被delete
(2)弱引用操作
弱指针的最大特点是它不能直接操作目标对象,在于弱指针类没有重载*和->操作符号,而强指针重载了这两个操作符号。但是,如果我们要操作目标对象,需要把弱指针升级为强指针。
(3)目标对象生命周期控制
目标对象生命周期控制除强弱引用计数外,还有flag标志
A. 如果对象的标志位被设置为0,那么只要发现对象的强引用计数值为0,那就会自动delete掉这个对象;
B. 如果对象的标志位被设置为OBJECT_LIFETIME_WEAK,那么只有当对象的强引用计数和弱引用计数都为0的时候,才会自动delete掉这个对象;
C. 如果对象的标志位被设置为OBJECT_LIFETIME_FOREVER,那么对象就永远不会自动被delete掉,谁new出来的对象谁来delete掉。
读到这里,这篇"android智能指针怎么用"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。