印象笔记链接:
http://app.yinxiang.com/l/AAXdkdFkFV1L-Y6jsHAGUegJenwyqPc9SzQ/
印象笔记搬运:
cocos2d::Vector
1、底层实现是用std::vector
随机访问O(1)
将元素插入到尾部或者删除尾部的元素,O(1)
随机插入或删除O(n)
2、T必须是继承自Cocos2d::object类型的指针,因为已经将cocos2d-x的内存管理模型集成到了Cocos2d::Vector<T>
3、内存管理
警告
:
cocos2d::Vector<T>
并不是
cocos2d::Object
的子类,所以不要像使用其他cocos2d类一样来用retain/release和引用计数内存管理
4、使用
(1) 警告:
cocos2d::Vector<T>
并没有重载[]操作,所以不能直接用下标[i]来获取第i位元素。
5、
- 考虑基于栈的
cocos2d::Vector<T>
优先用于基于堆的 - 当将
cocos2d::Vector<T>
作为参数传递时,将它声明成常量引用:const cocos2d::Vector<T>&
- 返回值是
cocos2d::Vector<T>
时,直接返回值,这种情况下编译器会优化成移动操作。 - 不要用任何没有继承cocos2d::Object的类型作为
cocos2d::Vector<T>
的数据类型。
cocos2d::Map
- 将
cocos2d::Map<K,V>()
作为参数传递时,将它声明为常量引用const cocos2d::Map<K,V>()&
- V类型必须为
cocos2d::Object
的子类指针,不能用其他的类型包括基本类型。
cocos2d::Value
cocos2d::Value
底层用一个统一的变量来保存任意基本类型值
注意
:
cocos2d::Value
不能像其它cocos2d类型一样使用retain/release和refcount内存管理
CCArray
remove和fastRemove有什么区别,可以看看源代码,remove是从CCArray中完全的移除,fastRemove只是将CCArray中对应的对象释放掉了,没够改变整个CCArray的结构。从代码上来看,区别在于删除元素之后,是否把数组之后的元素向前移动覆盖掉之前位置的元素。 代码上的差别如下所示:
重点:内存管理
Cocos2d-x中的引用计数(Reference Count)和自动释放池(AutoReleasePool)
使用静态构造函数
CCSprite::create(“player.png”)是一个使用静态构造函数的例子。所以在Cocos2d-x中所有的类,除了单例,都提供了静态构造函数,这些静态构造函数包含下面4项操作:
-
新建一个对象
-
调用object->init(…)
-
假如初始化成功,例如,成功的找到纹理文件,那么接下来将会调用object->autorelease()。
- 返回这个已经被标记了autorelease的对象。
如果一个用静态构造函数创建的指针对象要在全局使用 那么要加上retain 并且在析构函数的地方加上 release()