在Brew开发中,基本上所有的Brew开放的API都是以Vtbl的形式封装并发布,那么如果我们自己想封装某个模块,怎么用Vtbl来实现呢?接下来看一个用Vtbl封装的IQueue。
Queue.h文件
Queue.c文件
以上是代码示例部分,其中值得注意的是IQueue* IQUEUE_CreateInstance(void)方法中的内存分配部分。
这句代码是在堆上面申请了sizeof(Queue) + sizeof(VTBL(IQueue))大小的空间,不难看出,这个空间的大小是Queue结构体的实体大小加上IQueueVtbl的大小,就是把函数接口部分和数据部分都放在一起,以便内存管理.
这句代码不难看出,分配的内存空间中,内存前面的sizeof(Queue)大小是数据部分,内存后面的 sizeof(VTBL(IQueue))大小是Vtbl虚函数表部分。