# 32、编写“异常安全代码”时留意内存管理问题

​ 虽然OC只有在发生严重错误导致程序无法继续运行时，才应跑出异常；但如果使用OC++编码或使用了第三方库抛出的异常不受控制时，就需要捕获及处理异常了。

​ 有些系统库也会抛出异常，如：使用KVO时，若注销一个尚未注册的“观察者”，则会抛出异常；

​ 发生异常时应如何管理内存又是个值得研究的问题。在`try`块中，如果先保留了某个对象，然后在释放它之前又抛出了异常，此时除非catch块能释放对象，否则就会导致内存泄露。

​ ARC模式下，不会在`finally`块里加代码处理内存泄露问题，因为者需要添加大量的样板代码，会严重影响运行期的性能，即便在不抛异常时也如此。（而且添加的额外代码还会明显增加应用程序的大小。这些副作用都不甚理想）虽说默认不会添加，但可以通过`-fobjc-arc-exceptions`这个编译器标志来开启此功能。并且处于OC++模式时编译器会自动把`-fobjc-are-exceptions`标志打开。
