CCArray也是cocos2d-x自己写的类。它相当于是objc的NSArray。在cocos2d-x中是没有NSArray的概念的(NSArray和NSMutableArray的唯一区别就是一个不可以改变数组中含有的对象,另一个可以改变)。但是CCArray也有一个小问题。首先,CCArray是不能使用new的方式创建的。其次,使用CCArray::array()创建的数组,即使这个数组已经是当前类的成员变量,也必须要做一次retain,否则的话在创建数组的函数返回的时候,CCArray就会被直接释放掉了。由于这个问题也无法通过编译时候暴露出来,而且在objc中创建自动释放的NSArray类型的成员变量的时候是不需要retain的,所以当我从objc转为使用cocos2d-x的时候,经常会忘记做retain,多次导致了程序在其他函数中使用该成员变量的时候出现错误。
初始化 CCArray *tmpArray = CCArray::array(); tmpArray->retain(); 增加元素 tmpArray>addobject(元素); 删除 tmpArray->removeAllObjects(); tmpArray->release(); 不是因为cocos2d-x引用计数设计的有问题,而是因为cocos2d-x的autorelease机制和cocoa的NSautorelease有很大区别,没搞清楚就会出现疑问。 cocos2d-x里,所有autorelease的对象只能在一个event loop里保持有效,也就是一次渲染frame,当每帧渲染结束时,pool manager会对他管理的每个autorelease的对象做一次release()调用,cocos2d-x里的代码很明确: voID CCdisplaylinkDirector::mainLoop(voID) { ... // release the objects CCPoolManager::sharedPoolManager()->pop(); ... } voID CCPoolManager::pop() { ... m_pCurReleasePool->clear(); ...
总结以上是内存溢出为你收集整理的CCArray全部内容,希望文章能够帮你解决CCArray所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)