ARCでの @try -@catch

非ARC環境だと、@tryブロックで例外スローしたら

release が呼ばれないのでリークしてしまう。

なので 確実に実行される @finallyブロックで release する必要がある。

一方ARC環境ではどうかというと

まず release を書くとエラーになるので書けません。

ARCの場合であっても、コンパイラフラグに -fobjc-arc-exceptions を指定してやることで

例外処理のコードを生成してくれるようになります。

しかし、このコードサイズがかなり大きなものになってしまうらしく

実行時にパフォーマンスが下がってしまう。

なので結局は、Appleが推奨している通り、できる限りエラーの処理にはNSError を使うのがベストなのでしょうね。