二段构造:
是什么->先构造,再初始化,初始化成功则返回引用,失败则销毁
为什么->cocos中结合引用计数,将内存交给poolManager管理
避免使用try catch异常处理
C++构造没有返回值,不能运行virsual函数
为每一个类提供一个静态工厂方法来代替构造函数
REF:
是什么->cocos中使用引用计数内存管理的类的基类
为什么->普通C++的new delete会出现一个问题,对象被多个对象引用的时候,不知道该由谁delete
对象从别处获得(共享的对象): 先调用x->retain(); 释放: x->release()[这时必须先retain了, 否则可能别的拥有者调用了release导致x对应的资源被真的释放, 这里获得的是一个野指针]
自动释放池PoolManager:
是什么->cocos对象调用autoRelease的时候,交给PoolManager管理,在一个loop的生命周期中,如果对象被retain则对象保存下来(如addChild)
CCAutoreleasePool的逻辑是,当你调用object->autorelease(),object就被放到自动释放池中。自动释放池能够帮助你保持这个object的生命周期,直到当前消息循环的结束。在这个消息循环的最后,假如这个object没有被其他类或容器retain过,那么它将自动释放掉。
为什么->
(设计的两难:选择异常还是两段构造) http://www.cppblog.com/luckycat/archive/2010/03/04/108899.aspx
(Cocos2d-x中的引用计数和自动释放池) http://cn.cocos2d-x.org/tutorial/show?id=2300
Cocos2d-x中的引用计数(Reference Count)和自动释放池(AutoReleasePool)
http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v2/memory/refcount-autoreleasepool/zh.md