看cocos2d-3.o时想到的关于实例化的有关问题
看cocos2d-3.o时想到的关于实例化的问题
cocos2d的实例化用了很多种方式
比如:
Application的实例化:它是通过程序启动时调用
通过AppDelegate来实例化父类Application,并把Application的实例传到静态变量sm_pSharedApplication,再通过Application::getInstance()获得实例,为什么要这样做呢?
再比如单例模式的设计Configuration,它是将Configuration的构造方法设为私有,然后通过getInstance方法获得实例,如下:
Configuration的构造方法为空,真正的工作由init()完成,这和教科书提供的单例模式有所不同,请问这样做又有什么好处?
------解决思路----------------------
很多情况下类的初始化要依赖于外部环境,比如要从系统环境、数据库或数据文件中读取数据来进行初始化,这些操作都存在可靠性的问题,比如数据库连接不上等,这时候把这些操作放在一个单独的函数中好处理一些,不会影响到类的创建,当然不是必须这么做,从某种角度来讲,这也是一个编程习惯和风格问题
------解决思路----------------------
cocos2dx这样做,是因为他有一个自己的内存回收机质,这些机质都是从OC那边过来的。所以需要create和init方法
关于Application::getInstance()这是单件模式,在游戏开发中,这个很常见。
------解决思路----------------------
这样的单例 一般是永远不释放的. 而且不用你手动创建. 啥时候用啥时候创建.
cocos2d的实例化用了很多种方式
比如:
Application的实例化:它是通过程序启动时调用
// create the application instance
AppDelegate app;
通过AppDelegate来实例化父类Application,并把Application的实例传到静态变量sm_pSharedApplication,再通过Application::getInstance()获得实例,为什么要这样做呢?
再比如单例模式的设计Configuration,它是将Configuration的构造方法设为私有,然后通过getInstance方法获得实例,如下:
Configuration* Configuration::getInstance()
{
//s_sharedConfiguration为私有静态指针
if (! s_sharedConfiguration)
{
s_sharedConfiguration = new Configuration();
s_sharedConfiguration->init();
}
return s_sharedConfiguration;
}
Configuration的构造方法为空,真正的工作由init()完成,这和教科书提供的单例模式有所不同,请问这样做又有什么好处?
------解决思路----------------------
很多情况下类的初始化要依赖于外部环境,比如要从系统环境、数据库或数据文件中读取数据来进行初始化,这些操作都存在可靠性的问题,比如数据库连接不上等,这时候把这些操作放在一个单独的函数中好处理一些,不会影响到类的创建,当然不是必须这么做,从某种角度来讲,这也是一个编程习惯和风格问题
------解决思路----------------------
cocos2dx这样做,是因为他有一个自己的内存回收机质,这些机质都是从OC那边过来的。所以需要create和init方法
关于Application::getInstance()这是单件模式,在游戏开发中,这个很常见。
------解决思路----------------------
这样的单例 一般是永远不释放的. 而且不用你手动创建. 啥时候用啥时候创建.