本来想分析CCArray的,结果发现实现部分基本都在ccArray里面,CCArray几乎只是将ccArray封装成了类,所以索性就直接分析ccArray了。
头文件
//- ccArray 实现里包含了retain和release操作
//- ccCArray 没有包含retain和release操作
typedef struct _ccArray {
unsigned int num, max;
CCObject** arr;
} ccArray;
// 分配指定大小的空间
ccArray* ccArrayNew(unsigned int capacity);
// 释放空间
void ccArrayFree(ccArray*& arr);
// 分配空间翻倍 一般不需要调用 只需调用ccArrayEnsureExtraCapacity即可
// 每次分配2倍空间的好处是:一次性分配空间 下次插入时 可更快的插入 免去空间分配的时间 思想有点像线程池
void ccArrayDoubleCapacity(ccArray *arr);
// 确保空间足够 如果不够 翻倍
void ccArrayEnsureExtraCapacity(ccArray *arr, unsigned int extra);
// 收缩 使空间与实际item数相同
void ccArrayShrink(ccArray *arr);
// 获取指定元素的索引
unsigned int ccArrayGetIndexOfObject(ccArray *arr, CCObject* object);
// 检查元素是否在array内
bool ccArrayContainsObject(ccArray *arr, CCObject* object);
// 在末尾添加元素 不检查空间是否足够 所以在空间不足时 会出现无法预测的行为
void ccArrayAppendObject(ccArray *arr, CCObject* object);
// 在末尾添加元素 空间不足时重新分配
vo