博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2dx CCArray类
阅读量:4215 次
发布时间:2019-05-26

本文共 2674 字,大约阅读时间需要 8 分钟。

1、继承自CCObject

class CC_DLL CCArray : public CCObject

2、如果通过create创建,会加入自动释放池,通过new创建则不会,所以使用时要记得retain,然后释放时
使用release。
CCArray* CCArray::create(){    CCArray* pArray = new CCArray();    if (pArray && pArray->init())    {        pArray->autorelease();    }    else    {        CC_SAFE_DELETE(pArray);    }        return pArray;}
3、addObject 增加一个,会调用retain

void CCArray::addObject(CCObject* object){    ccArrayAppendObjectWithResize(data, object);}--》/** Appends an object. Capacity of arr is increased if needed. */void ccArrayAppendObjectWithResize(ccArray *arr, CCObject* object){	ccArrayEnsureExtraCapacity(arr, 1);	ccArrayAppendObject(arr, object);}--》ccArrayAppendObject/** Appends an object. Behavior undefined if array doesn't have enough capacity. */void ccArrayAppendObject(ccArray *arr, CCObject* object){    CCAssert(object != NULL, "Invalid parameter!");    object->retain(); //retain对象	arr->arr[arr->num] = object;	arr->num++;}
4、 移除其中一个,默认会release

/** Remove a certain object */void removeObject(CCObject* object, bool bReleaseObj = true);//实现:void CCArray::removeObject(CCObject* object, bool bReleaseObj/* = true*/){    ccArrayRemoveObject(data, object, bReleaseObj);}-->>/** Searches for the first occurrence of object and removes it. If object is not found the function has no effect. */void ccArrayRemoveObject(ccArray *arr, CCObject* object, bool bReleaseObj/* = true*/){	unsigned int index = ccArrayGetIndexOfObject(arr, object);	if (index != CC_INVALID_INDEX)    {		ccArrayRemoveObjectAtIndex(arr, index, bReleaseObj);    }}-->>ccArrayRemoveObjectAtIndex/** Removes object at specified index and pushes back all subsequent objects. Behavior undefined if index outside [0, num-1]. */void ccArrayRemoveObjectAtIndex(ccArray *arr, unsigned int index, bool bReleaseObj/* = true*/){    CCAssert(arr && arr->num > 0 && index < arr->num, "Invalid index. Out of bounds");    if (bReleaseObj)    {        CC_SAFE_RELEASE(arr->arr[index]); //release    }    	arr->num--;		unsigned int remaining = arr->num - index;	if(remaining>0)    {		memmove((void *)&arr->arr[index], (void *)&arr->arr[index+1], remaining * sizeof(CCObject*));    }}
5、移除全部,都会release

void CCArray::removeAllObjects(){    ccArrayRemoveAllObjects(data);}-->>/** Removes all objects from arr */void ccArrayRemoveAllObjects(ccArray *arr){	while( arr->num > 0 )    {		(arr->arr[--arr->num])->release();    }}
6、析构

CCArray::~CCArray(){    ccArrayFree(data);}-->>/** Frees array after removing all remaining objects. Silently ignores NULL arr. */void ccArrayFree(ccArray*& arr){    if( arr == NULL )     {        return;    }	ccArrayRemoveAllObjects(arr);		free(arr->arr);	free(arr);    arr = NULL;}

转载地址:http://ftsmi.baihongyu.com/

你可能感兴趣的文章
【屌丝程序的口才逆袭演讲稿50篇】第七篇:请留意我们身边的风景 【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第八篇:坚持的力量 【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第九篇:春节那些事-过年回家不需要理由【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第十一篇:马云乌镇40分钟演讲实录【张振华.Jack】
查看>>
Java并发编程从入门到精通 张振华.Jack --我的书
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第十二篇:世界上最快的捷径【张振华.Jack】
查看>>
Android中Java代码和XML布局效率问题
查看>>
android TextView属性大全(转)
查看>>
Conclusion for Resource Management
查看>>
Conclusion for Constructors,Destructors,and Assignment Operators
查看>>
Conclusion for Accustoming Yourself to C++
查看>>
面试题1:赋值运算函数(offer)
查看>>
Mark : MessagePack简介及使用
查看>>
Mark : hive文件存储格式
查看>>
mark : hadoop 四种压缩格式
查看>>
All Things OpenTSDB
查看>>
单例模式(singleton),工厂方法模式(factory),门面模式(facade)
查看>>
抽象模式,适配器模式(Adapter),模板方法模式(Template method)
查看>>
建造者模式(builder),桥梁模式(bridge mode),命令模式(Command mode)
查看>>
装饰模式(Decorator),迭代器模式(Iterator),组合模式(composite)
查看>>