{
int size1,size2
size1=strlen(strDest)//也可用while判断到'\0',size1++
size2=strlen(strSource)//同上
assert((strDest != NULL) &&(strSource != NULL)&&(size1>=size2))// 防御主要在于使用断言,必须都是非空指针,而且Dest长度大于等于Source的长度才能继续执行函数
byte *pbTo = (byte *) strDest// 防止改变strDest 的地址
byte *pbFrom = (byte *) strSource// 防止改变strSource 的地址
while(size1-- >0 )
*pbTo ++ = *pbFrom ++
*pbTo='\0'
return strDest
}
理论部分摘自代码大全 理论部分摘自代码大全 在防御式驾驶中要建立这样一种思维,那就是你永远也不能确定另一位司机将要做什么。这样才能确保在其他人做出危险动作时你也不会受到危害。你要承担起保护自己的责任,哪怕是其他司机犯的错误。防御式编程的主要思想是:子程序应该不因传入错误数据而被破坏,哪怕是由其他子程序产生的错误数据。
断言是指在开发期间使用的、让程序在运行时进行自检的代码。断言为真,则表明程序运行正常;断言为假,则意味着它已经在代码中发现意料之外的错误。
断言可以用于在代码中说明各种假定,澄清各种不希望的情形。
断言主要是用于开发和维护阶段。通常,断言只是在开发阶段被编译到目标代码中。在开发阶段,断言可以查清相互矛盾的假定、预料之外的情况以及传给子程序的错误数据等。
在OC中,断言使用NSAssert函数,是一个宏。基本形式是两个参数,第一个参数是一个bool值:断言的结果,第二个参数是一个描述字符串。断言的结果为false时,第二个参数描述字符串会输出。
这里举例一段BlocksKit中的代码:
断言通常用来判断外部输入的参数是否正确,所以cocoa封装了一个检查参数的断言,与NSAssert相比方便的地方就是自动定义了一个输出字符串。
NSParameterAssert是一个封装了NSAssert的宏,定义如下:
在来看上面代码中这句断言的使用:
这段代码的意图是用传入的block来代替某个对应delegate的方法,所以要检查一下传入的block和这个delegate上对应的方法签名是否一致。如果不一致则中断程序,抛出“Incompatible block”提示信息。
在swift中,断言用assert函数。两个参数和OC中的相同。
通过声明可以发现,断言中会记录当前文件和行号,但是这里赋了默认值,所以使用assert时可以省略。
这里顺带提下代码规范,有些人有时为了方便会把几句代码写在一行。这样写一个潜在的坏处就是如果发生异常,日志中记录了行号。但是因为这一行有几句代码,增加了判断是由具体哪一句代码产生异常。应该避免将几句代码写在一行里。
断言还有一个经常使用的地方是单元测试。在单元测试中,XCode中封装了几个在测试中经常使用的断言。
这里列举AFN单元测试中用到了XCTAssert的代码,只截取部分带断言代码:
XCT(Xcode Test)中还有很多类似的断言,有兴趣可以自己查文档,这里就不列举了。
错误处理代码用来检查不太可能经常发生的非正常情况,这些情况在写代码时就预料到的,而且在产品代码中也要处理这些情况。而断言是用于检查代码中的bug,如果在发生异常的时候触发了断言,采取的措施就不仅仅是对错误做出恰当的反应,而是应该修改源码并重新编译。可以把断言理解成一种注释,它说明了这个程序的假定。
断言的可以在编译器中设置关闭,如果你把一些 *** 作写在断言里,在某些情况下可能编译器会过滤掉这些代码。
这样写就很危险,应该这样写:
对于要求高健壮性的代码,可能项目非常庞大,超长的开发周期和很多的开发人员,也可能出现断言被触发但是没有被注意到,这时应该也处理一下触发断言时的错误。
欢迎关注我的微博: @没故事的卓同学
楼主握爪,我也没用360,建议找占用小的推荐你可以试试腾讯电脑管家,兼容效果非常好哟,通过OPSWAT认证的
OPSWAT的认证计划十分严格。由OPSWAT颁发的产品认证为世界顶尖的终端安全应用程序提供开放式的工业级兼容性和可靠性认证,它被用来验证终端安全解决方案与 *** 作系统的兼容性,被验证的产品都来自市场中拥有领先技术的厂商。
腾讯电脑管家是免费专业安全软件,杀毒管理二合一(只需要下载一份),占内存小,杀毒好,防护好,无误报误杀。拥有云查杀引擎、反病毒引擎、金山云查杀引擎、AVIRA查杀引擎、小红伞和查杀修复引擎等世界一流杀毒软件内嵌杀毒引擎!保证杀毒质量
杀毒保护也是很不错的,在上半年内腾讯电脑管家以良好的表现相继斩获Checkmark(西海岸)、AV-Test、AVC、VB100四项国际最权威的反病毒测试,继续包揽国际杀软测试“四大满贯”,处于全球安全软件第一阵营
保护你帐号不说,还帮你游戏加速,QQ升级,还有礼包拿。占内存又小,运行速度快。最重要的是永久免费。
现在出8.5新版了,增加广告过滤、安全沙箱,QQ账号的多维度防护,推荐可以试试哟
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)