title: Why is raising an NSException not bringing down my application?
body: <p><strong>The Problem</strong></p>
  
  <p>I'm writing a Cocoa application and I want to raise exceptions that will crash the application noisily.</p>
  
  <p>I have the following lines in my application delegate:</p>
  
  <pre><code>[NSException raise:NSInternalInconsistencyException format:@"This should crash the application."];
  abort();
  </code></pre>
  
  <p>The problem is, they don't bring down the application - the message is just logged to the console and the app carries on it's merry way.</p>
  
  <p>As I understand it, the whole point of exceptions is that they're fired under exceptional circumstances. In these circumstances, I want the application to quit in an obvious way. And this doesn't happen.</p>
  
  <p><strong>What I've tried</strong></p>
  
  <p>I've tried:</p>
  
  <pre><code>-(void)applicationDidFinishLaunching:(NSNotification *)note
      // ...
      [self performSelectorOnMainThread:@selector(crash) withObject:nil waitUntilDone:YES];
  }
  
  -(void)crash {
      [NSException raise:NSInternalInconsistencyException format:@"This should crash the application."];
      abort();
  }
  </code></pre>
  
  <p>which doesn't work and </p>
  
  <pre><code>-(void)applicationDidFinishLaunching:(NSNotification *)note
      // ...
      [self performSelectorInBackground:@selector(crash) withObject:nil];
  }
  
  -(void)crash {
      [NSException raise:NSInternalInconsistencyException format:@"This should crash the application."];
      abort();
  }
  </code></pre>
  
  <p>which, rather confusingly, works as expected.</p>
  
  <p>What's going on? What am I doing wrong?</p>