あまり使う機会はないのですが、たとえばImmutableなクラスにadd***メソッドを呼びだした時などに例外を発生させたいときがあります。

そういうときはNSExceptionを使用します。

    [[NSException exceptionWithName:@"hoge" reason:@"hoge is nil" userInfo:nil] raise];

もしくは

    [NSException raise:@"hoge" format:@"hoge is nil"];

実行例

こんな感じで落ちます(笑

2014-02-17 09:42:58.326 NSExceptionTest[19697:a0b] *** Terminating app due to uncaught exception 'hoge', reason: 'hoge is nil'
*** First throw call stack:

例外のキャッチ

例外をキャッチする時は、@try 〜 @catch で例外をキャッチしましょう。

    @try {
        // 例外が起きそうな処理
    }
    @catch (NSException *exception) {
        // 例外が起こった時の処理
        NSLog(@"exception = %@", exception.description);
    }
    @finally {
        // あとしまつ
    }

@try〜@catchってなんかJavaっぽくて変な感じですね!