ARCでの @try -@catch
非ARC環境だと、@tryブロックで例外スローしたら
release が呼ばれないのでリークしてしまう。
なので 確実に実行される @finallyブロックで release する必要がある。
一方ARC環境ではどうかというと
まず release を書くとエラーになるので書けません。
ARCの場合であっても、コンパイラフラグに -fobjc-arc-exceptions を指定してやることで
例外処理のコードを生成してくれるようになります。
しかし、このコードサイズがかなり大きなものになってしまうらしく
実行時にパフォーマンスが下がってしまう。
なので結局は、Appleが推奨している通り、できる限りエラーの処理にはNSError を使うのがベストなのでしょうね。