cocos2d-x学习笔记

印象笔记链接:

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项操作:

  1. 新建一个对象

  2. 调用object->init(…)

  3. 假如初始化成功,例如,成功的找到纹理文件,那么接下来将会调用object->autorelease()。

  4. 返回这个已经被标记了autorelease的对象。


如果一个用静态构造函数创建的指针对象要在全局使用 那么要加上retain  并且在析构函数的地方加上 release()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值