防御式编程模式,这个是在浏览其他博客的时候看到的,这里大体说一下它的意思,关于这方面的文章自行百度吧。其实防御式编程模式并不是一种编程模式,只是说我们写代码的时候为了要保证程序的健壮性要采取一定的防御措施,我们写代码通常都是带有一定的假定的,设想一下如果用户输入了非法的值,我们的假定就会打破,程序就会出现bug,所以为了防止程序出错,我们需要采取一定的措施来避免这种不确定的操作导致的bug,这个就叫做防御式编程模式。

这个在cocos的代码中经常看到,比如和do...while配合的CC_BREAK_IF,如果某一个对象没有初始化成功就break这个循环,这时候init的返回值是false,这样我们就知道了程序出错了。但是3.0的版本在init函数中却没有这么写,我想也许是这么写太麻烦了吧,也就是说这种编程模式会造成代码的臃肿。还有引擎为我们提供的以下的一些宏,我们在编程的时候要尽量使用这些宏来保证程序的健壮性。

#define CC_SAFE_DELETE(p)            do { if(p) { delete (p); (p) = 0; } } while(0)
#define CC_SAFE_DELETE_ARRAY(p)     do { if(p) { delete[] (p); (p) = 0; } } while(0)
#define CC_SAFE_FREE(p)                do { if(p) { free(p); (p) = 0; } } while(0)
#define CC_SAFE_RELEASE(p)            do { if(p) { (p)->release(); } } while(0)
#define CC_SAFE_RELEASE_NULL(p)        do { if(p) { (p)->release(); (p) = 0; } } while(0)
#define CC_SAFE_RETAIN(p)            do { if(p) { (p)->retain(); } } while(0)

所以这种编程模式其实就是考虑程序可能存在的一些bug而采取的一种措施,比如检测函数传递进来的参数,使用符号常量来定义一些文件名或者是数字,函数最好有返回值,这样可以容易发现bug。恩,就是这些吧,我觉得这种编程模式也是一种习惯,要想养成良好的编程习惯平时就注意一下这些小的细节问题。