异常机制的本质:

 用冗余代码实现额外信息的传递:

 

异常机制的本质是异常机制代码的解释权:

作出解释即用冗余代码实现异常机制的额外逻辑;

 

1、异常信息的表达:包含什么:在哪里出的什么错误;

2、异常信息的传递:栈帧、长跳转;

3、异常的处理:

 

                /**

                 * 抛出异常对象,对应代码:@throw e;

                 * 

                 * objc_exception_throw函数实现步骤如下:

                 * 1. 把e对象保存到_stack->pointers[0]中使其在@catch{}中能被捕获。

                 * 2. 将_stack从全局栈中弹出。

                 * 3. 调用_longjmp()跳转到前面if语句中的_setjmp()位置。_longjmp()使得_setjmp()函数第二次返回,

                 * 返回值为1,所以会执行else{}中也就是@catch{}中的代码。

                 */

                objc_exception_throw(e);

 

 

 

In general, an exception breaks the normal flow of execution and executes a pre-registered exception handler. The details of how this is done depends on whether it is a hardware or software exception and how the software exception is implemented. Some exceptions, especially hardware ones, may be handled so gracefully that execution can resume where it was interrupted.

 

 

现代程序的规模已经大到让人无法全知的程度,因此异常机制是一种很有效的机制。

 

 

异常信息的返回与处理


------------------越是喧嚣的世界,越需要宁静的思考------------------ 合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。 积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。