我所理解的cocos2dx 第一章总结

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

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

第一章

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

       c++标准库提供的vector,map等等虽然给我们提供了使用上的方便,但是它们不支持cocos2dx的内存管理方式,因此在使用的过程中需要我们自己管理内存,一不小心就可能导致空指针等等原因导致程序崩溃(我在2.x版本的时候喜欢用标准库的东西),现在新的版本给我们提供了新的数据结构vector和map(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和Map利用c++11的静态断言函数static_assert来实现编译时的类型检测。

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

移动语义

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

你可能感兴趣的:(cocos2dx,数据结构)