title: iPhone app crashes on start-up, in stack-trace only messages from built-in frameworks
body: <p>My app some times crashes at start-up. In stack-trace only messages from built-in frameworks. An excerpt from a crash log:</p>
  
  <pre><code>OS Version:      iPhone OS 3.1.3 (7E18)
  Report Version:  104
  
  Exception Type:  EXC_BAD_ACCESS (SIGBUS)
  Exception Codes: KERN_PROTECTION_FAILURE at 0x000e6000
  Crashed Thread:  0
  
  Thread 0 Crashed:
  0   CoreGraphics                       0x339305d8 argb32_image_mark_RGB32 + 704
  1   CoreGraphics                       0x338dbcd4 argb32_image + 1640
  2   libRIP.A.dylib                     0x320d99f0 ripl_Mark
  3   libRIP.A.dylib                     0x320db3ac ripl_BltImage
  4   libRIP.A.dylib                     0x320cc2a0 ripc_RenderImage
  5   libRIP.A.dylib                     0x320d5238 ripc_DrawImage
  6   CoreGraphics                       0x338d7da4 CGContextDelegateDrawImage + 80
  7   CoreGraphics                       0x338d7d14 CGContextDrawImage + 364
  8   UIKit                              0x324ee68c compositeCGImageRefInRect
  9   UIKit                              0x324ee564 -[UIImage(UIImageDeprecated) compositeToRect:fromRect:operation:fraction:]
  10  UIKit                              0x32556f44 -[UINavigationBar drawBackButtonBackgroundInRect:withStyle:pressed:]
  11  UIKit                              0x32556b00 -[UINavigationItemButtonView drawRect:]
  12  UIKit                              0x324ecbc4 -[UIView(CALayerDelegate) drawLayer:inContext:]
  13  QuartzCore                         0x311cacfc -[CALayer drawInContext:]
  14  QuartzCore                         0x311cab00 backing_callback
  15  QuartzCore                         0x311ca388 CABackingStoreUpdate
  16  QuartzCore                         0x311c978c -[CALayer _display]
  17  QuartzCore                         0x311c941c -[CALayer display]
  18  QuartzCore                         0x311c9368 CALayerDisplayIfNeeded
  19  QuartzCore                         0x311c8848 CA::Context::commit_transaction(CA::Transaction*)
  20  QuartzCore                         0x311c846c CA::Transaction::commit()
  21  QuartzCore                         0x311c8318 +[CATransaction flush]
  22  UIKit                              0x324f5e94 -[UIApplication _reportAppLaunchFinished]
  23  UIKit                              0x324a7a80 -[UIApplication _runWithURL:sourceBundleID:]
  24  UIKit                              0x324f8df8 -[UIApplication handleEvent:withNewEvent:]
  25  UIKit                              0x324f8634 -[UIApplication sendEvent:]
  26  UIKit                              0x324f808c _UIApplicationHandleEvent
  27  GraphicsServices                   0x335067dc PurpleEventCallback
  28  CoreFoundation                     0x323f5524 CFRunLoopRunSpecific
  29  CoreFoundation                     0x323f4c18 CFRunLoopRunInMode
  30  UIKit                              0x324a6c00 -[UIApplication _run]
  31  UIKit                              0x324a5228 UIApplicationMain
  32  Journaler                          0x000029ac main (main.m:14)
  33  Journaler                          0x00002948 start + 44
  </code></pre>
  
  <p>File <code>main.m</code> is simple as possible:</p>
  
  <pre><code>#import &lt;UIKit/UIKit.h&gt;
  
  int main(int argc, char *argv[]) {
  
      NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
      int retVal = UIApplicationMain(argc, argv, nil, nil); // line 14
      [pool release];
      return retVal;
  }
  </code></pre>
  
  <p>What my cause the app to crash?</p>
  
  <p><code>JournalerAppDelegate.h</code>:</p>
  
  <pre><code>// ...
  
  @interface JournalerAppDelegate : NSObject &lt;UIApplicationDelegate&gt; {
      // ...
      UINavigationController *navigationController;
      AccountsViewController *rootViewController;
      // ...
  }
  </code></pre>
  
  <p><code>JournalerAppDelegate.m</code>:</p>
  
  <pre><code>// ...
  
  @implementation JournalerAppDelegate
  // ...
  - (void)applicationDidFinishLaunching:(UIApplication *)application {
      // ...
      rootViewController = [[AccountsViewController alloc] initWithNibName:@"AccountsViewController" bundle:nil];
      navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
  
      NSString *accountKey = // ...;
      if (accountKey) {
          LJAccount *account = // ...;
          if (account) {
              [rootViewController view]; // forces to load view
              [rootViewController openAccount:account animated:NO];
          }
      }
  
      [window addSubview:navigationController.view];
      [window makeKeyAndVisible];
  }
  // ...
  </code></pre>
  
  <p><code>AccountsViewController.h</code>:</p>
  
  <pre><code>// ...
  
  @interface AccountsViewController : UIViewController&lt;/* ... */&gt; {
      // ...
      NSMutableDictionary *cacheTabBarControllers;
      // ...
  }
  </code></pre>
  
  <p><code>AccountsViewController.m</code>:</p>
  
  <pre><code>// ...
  
  @implementation AccountsViewController
  // ...
  - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle {
      if (self = [super initWithNibName:nibName bundle:nibBundle]) {
          cacheTabBarControllers = [[NSMutableDictionary alloc] initWithCapacity:1];
      }
      return self;
  }
  // ...
  - (void)openAccount:(LJAccount *)account animated:(BOOL)animated {
      AccountTabBarController *tabBarController = [[cacheTabBarControllers objectForKey:account.title] retain];
      if (!tabBarController) {
          tabBarController = [[AccountTabBarController alloc] initWithAccount:account];
          [cacheTabBarControllers setObject:tabBarController forKey:account.title];
      }
  
      [self.navigationController pushViewController:tabBarController animated:animated];
      [tabBarController release];
  }
  // ...
  </code></pre>