1.rtt的对象容器 rtt的对象容器就是一个数组。 这个数组有多长?有多少大类,数组就有多长。每类占用数组的一个元素,每个元素维护一类对象的链表(可开启跳表加速查询),如下官方图: rtt中各个类创建的对象都会挂到对象容器对应的链表中去(实际上是调用rtt源码src / object.c中的rt_object_init把各个类创建的对象成员中的基类对象成员挂到对象容器中对应的链表中去)。
2.rtt对象容器的比喻 2.1 rtt对象容器就像一个图书馆
rtt各类创建了很多对象相当于图书馆采购了很多本书,然后把它分门别类地放到对应书架上去。用的时候,你根据名字和类别就能找到对应的对象的地址。
2.2 对象容器也像一个工具箱 刀斧剑戟,样样都有。
2.3 也是对象服务管理中心 场景一:存放对象到对象容器中 中心:您好,欢迎光临,很高兴为您服务! 客户:我要存放xx对象,这是名字、类别和地址。 中心:好的,请稍等。 中心:您好,xx对象已存好了,请您记好名字和类别以方便来取(或对不起,该类中重名了,无法存放)。
场景二:从对象容器中取出对象 中心:您好,欢迎光临,很高兴为您服务! 客户:给我查找下xx对象,这是名字和类别。 中心:好的,请稍等。 中心:您好,这是xx对象的地址,请及时取走(或对不起,您查找的对象不存在,请核对后再来)。
——这么看来,对象容器又像一个快递柜。
3.对象容器和类的联系 对象容器就像图书馆,类创建的对象就像书,类是出书的作者。
4.为何要这么设计? (1)方便管理。在运行过程中创建了多少对象,系统了如指掌。对象容器起到了监控整个系统的作用。 (2)方便使用。各个对象分散在不同的.c文件中,有的是静态变量,如果没有对象容器,别的模块想要使用某个对象,那个对象得需要加extern,长此以往,代码中到处都是extern了。但有了对象容器,那么不管你在哪个.c中运行,想要使用某对象那么就可以根据名字和类型从对象容器中取到——多么方便。
|