理论教育 Android系统中的强指针:RefBase类解析

Android系统中的强指针:RefBase类解析

时间:2023-06-19 理论教育 版权反馈
【摘要】:在Android系统中,强指针使用的引用计数类是RefBase,类RefBase比类LightRefBase要复杂。但是其功能和类LightRefBase一样,也提供了incStrong和decStrong成员函数来操作它的引用计数器。类RefBase与类LightRefBase的最大区别是,它不像类LightRefBase一样直接提供一个整型值来维护对象的引用计数。所以在类RefBase的具体实现中,强引用计数和弱引用计数功能是通过其成员变量mRefs提供的。在类RefBase中,其成员变量mRefs的类型为weakref_impl指针。用如下标记标识的部分,表示类weakref_impl被编译成非调试版本。

Android系统中的强指针:RefBase类解析

在Android系统中,强指针使用的引用计数类是RefBase,类RefBase比类LightRefBase要复杂。但是其功能和类LightRefBase一样,也提供了incStrong和decStrong成员函数来操作它的引用计数器。类RefBase与类LightRefBase的最大区别是,它不像类LightRefBase一样直接提供一个整型值(mutable volatile int32_t mCount)来维护对象的引用计数。原因是复杂的引用计数技术同时支持强引用计数和弱引用计数。所以在类RefBase的具体实现中,强引用计数和弱引用计数功能是通过其成员变量mRefs提供的。

类RefBase在文件frameworks\native\include\utils\RefBase.h中定义,具体实现代码如下。

在类RefBase中,其成员变量mRefs的类型为weakref_impl指针。类RefBase的具体实现在文件frameworks\native\libs\utils\RefBase.cpp中定义,具体实现代码如下。

整个上述代码被分为了如下的两大部分:(www.daowen.com)

(1)用如下DEBUG_REFS标记标识的部分,表示类weakref_impl被编译成调试版本。Debug版本的源代码的成员函数都是有实现的,实现这些函数的目的都是便于开发人员调试引用计数用。

(2)用如下标记标识的部分,表示类weakref_impl被编译成非调试版本。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈