美文网首页
Android系统轻量级指针、强指针和弱指针

Android系统轻量级指针、强指针和弱指针

作者: 耿渊博 | 来源:发表于2020-03-17 17:29 被阅读0次

自己学习记录使用

引用计数原则,每当有一个指针指向了一个new出来的对象时,就对这个对象的引用计数增加1,每当有一个指针不再使用这个对象时,就对这个对象的引用计数减少1,每次减1之后,如果发现引用计数值为0时,那么,就要delete这个对象了

对象的引用计数同时存在强引用和弱引用两种计数,

  • 当父对象要引用子对象时,就对子对象使用强引用计数技术
  • 当子对象要引用父对象时,就对父对象使用弱引用计数技术
    垃圾收集系统执行对象回收工作时,只要发现对象的强引用计数为0,而不管它的弱引用计数是否为0,都可以回收这个对象,如果我们只对一个对象持有弱引用计数,当我们要使用这个对象时,就不直接使用了,必须要把这个弱引用升级成为强引用时,才能使用这个对象,在转换的过程中,如果对象已经不存在,那么转换就失败了,这时候就说明这个对象已经被销毁了,不能再使用了。

Android系统提供的三种智能指针分别就称为轻量级指针(Light Pointer)、强指针(Strong Pointer)和弱指针(Weak Pointer)

智能指针类

1. 轻量级指针

LightRefBase:位置在frameworks/base/include/utils/RefBase.h

template <class T>
class LightRefBase
{
 public: 
          inline LightRefBase() : mCount(0) {}
          inline void incStrong(const void* id) const {
                    android _atomic_inc(&mCount);
          }
          inline void decStrong(const void* id) const {
                    if (android_atomic_dec(&mCount) == 1){
                        delete static_cast<const T*>(this);
                    }
        }
        //! DEBUGGING ONLY: Get current strong ref count.
    inline int32_t getStrongCount() const {
        return mCount;
       }
protected:
    inline ~LightRefBase() { }
 
private:
    mutable volatile int32_t mCount;  // 引用计数器了
}

成员变量mCount,引用计数器
成员函数incStrong和decStrong来维护引用计数器的值,这两个函数就是提供给智能指针来调用的了,这里要注意的是,在decStrong函数中,如果当前引用计数值为1,那么当减1后就会变成0,于是就会delete这个对象。

原文链接:https://blog.csdn.net/luoshengyang/article/details/6786239

相关文章

  • android智能指针介绍

    本篇介绍 android中有三种智能指针,分别是轻量级指针,强指针,弱指针。轻量级指针实现简洁,效果类似于强指针,...

  • Android智能指针

    网上已经有很多分析智能指针的文章了,讲得不错的是:Android系统的智能指针(轻量级指针、强指针和弱指针)的实现...

  • Android系统轻量级指针、强指针和弱指针

    自己学习记录使用 引用计数原则,每当有一个指针指向了一个new出来的对象时,就对这个对象的引用计数增加1,每当有一...

  • Android基础--智能指针

    智能指针分为3类为轻量级指针(Light Pointer)、强指针(Strong Pointer)和弱指针(Wea...

  • 第三章 智能指针

    无论是轻量级指针还是强指针或弱指针,它们的实现原理都是类似的,即需要对象提供引用计数器(某公共类),但是由智能指针...

  • Android智能指针

    A、在这里说明下,android中sp为强指针(sp==IServiceManager*),wp为弱指针。而在C+...

  • Object-C 中的强指针与弱指针

    1>强指针:默认情况下,所有的指针都是强指针.我们也可以用__strong修饰。 2>弱指针:用__weak修饰的...

  • 懒加载, 强/弱指针, 强/弱引用

    点击查看-->懒加载, 强/弱指针, 强/弱引用

  • Chapter 10 - 强指针 弱指针

    强指针 默认情况下,我们声明一个指针 这个指针就是1个强指针 我们也可以使用__strong来显式声明这是一个强指...

  • iOS 中的内存管理优化

    闭包 外面将强引用对象转化为弱引用指针,防止循环引用 block内弱引用转换成strong强引用指针,防止多线程和...

网友评论

      本文标题:Android系统轻量级指针、强指针和弱指针

      本文链接:https://www.haomeiwen.com/subject/fwrzehtx.html