This is an interesting article that explains the sequence of launching the application.
http://oleb.net/blog/2011/06/app-launch-sequence-ios/
As a summary of the article, the conclusion is:
Beyond the application: didFinishLaunchingWithOptions: there are several entry points for custom code at run time (none of them are usually required):
Directly in main() before calling UIApplicationMain() . The init method for the custom subclass of UIApplication. The initWithCoder: or awakeFromNib methods of our application are delegated if it is created from a NIB file (by default). The + initialize methods of our application delegation class or a custom subclass of UIApplication. Any class receives a + initialize message before sending its first message from the program.
Note that this sequence only runs when the application is actually launched. If the application is already running and just returned from the background, none of this happens.
source share