2016笔记——断言
2018-07-27 本文已影响6人
满庭花醉三千客
程序崩溃不可怕,可怕的是程序没有Crash而是运行在一个不稳定的状态下,如果程序还操作了数据,那么带来的危害是灾难性的。
所以,我们应该让程序Crash掉,尽量制造Crash的BUG,减少没有Crash的BUG,如果有可能,将没有Crash掉的BUG转换成Crash的BUG以便查找。
NSAssert,他的名字叫做“断言”。断言是指在开发期间使用的,让程序在运行时进行自检的代码。断言为真,则表明程序运行正常,而断言为假则意味着它已经在代码中发现了意料之外的错误。
断言对于大型的复杂的程序或者可靠性要求极高的程序来说极为重要。当断言为假的时候,几乎所有的系统的处理策略都是让程序死掉,方便你知道,程序出现了问题。
断言其实就是“防御式编程”的常用的手段,防御式编程的主要思想是:子程序应该不因传入错误数据而被破坏,哪怕是由其他子程序产生的错误数据。这种思想是将可能出现的错误造成的影响控制在有限的范围内。断言能够有效的保证数据的正确性,防止因为脏数据让整个程序运行在不稳定的状态中。
当断言条件为假时,捕获器会打印断言信息和当前的类名、方法名等信息,然后抛出一个NSInternalInconsistencyReception异常,让整个程序崩溃掉,并且在当前线程的断言捕获器中执行handleFailureInMethod:object:file:lineNumber:description: 以上信息为输出。
看一个Demo:
屏幕快照 2016-03-02 16.49.09.png运行时的效果:
屏幕快照 2016-03-02 16.50.11.png错误精确到某一行,实在不错哦
此外,涉及到self.block要注意避免循环引用问题,此时不可用NSAssert来作为断言了,要使用NSCAssert作为断言了:
屏幕快照 2016-03-02 16.55.21.png加油,多接触,才能更厉害~