我所理解的cocos2dx 第一章总结

这几天在看我所理解的cocos2dx这个本书,看了几章后想给自己做个总结,如果哪里不对,请看到的人帮我指正出来,谢谢!

我所理解的cocos2dx这本书,主要是针对3.x以后的版本讲解了一些新添加的东西。

第一章

这一章主要讲解了一下cocos2dx的一些新的特性,我主要总结的是新的数据结构的添加。

       c++标准库提供的vector,map等等虽然给我们提供了使用上的方便,但是它们不支持cocos2dx的内存管理方式,因此在使用的过程中需要我们自己管理内存,一不小心就可能导致空指针等等原因导致程序崩溃(我在2.x版本的时候喜欢用标准库的东西),现在新的版本给我们提供了新的数据结构vector<T>和map<K,V>(V必须为Ref类型),新的容器类采用模板类来避免不必要的数据类型的转换,同时完美的支持标准库里面的find,sort等函数,也能够与cocosdx的内存管理方式结合,帮我们省去了很多的麻烦。

新的数据结构的特点:

性能分析:

1.c++标准库的map是利用Key值作为索引存储。cocos2dx默认使用std::unordred_map是将每个key值转化为hash值,并按照hash值排序存储。

2.std::map的find()函数的时间复杂度为O(log2(n)),std::unordred_map复杂度为O(n)。

3.std::unordred_map初始化时候分配少量的buckets来存储Key/Value,如果短时间插入一定量的数据需要resverve()方法来设定数量,避免造成性能问题,但是偶尔的插入不需要,因为resverve()会增加std::unordred_map的内存占用。

与内存管理的结合

1.2.x的CCArray和CCDictionary通常被分配到堆上,因此我们需要考虑内存的释放,新的容器类不在继承Ref,通常应该分配到栈上使用,从而简化了内存管理。

2.Vector<T>和Map<K,V>利用c++11的静态断言函数static_assert来实现编译时的类型检测。

3.任何元素进入容器都会被retain,任何元素离开容器都会被release。

移动语义

新的容器使用了c++11的move语义,他们实现了移动拷贝函数和移动赋值操作符,减少了不必要的临时变量的生成和复制。(暂时这个我没用过,只能照搬书籍)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值