したがって、あなたが述べたように、のmain()
関数main.m
は開始点であり、それは次にを呼び出しますUIApplicationMain()
。UIApplicationMain
ドキュメントを確認すると、次の4つの引数が必要であることがわかります。
- argc、
- * argv []、
- *principalClassName
- *delegateClassName。
それらの最初の2つは、から渡された引数カウントと変数リストだけmain()
です。ただし、3番目と4番目の引数はNSStringsへのポインターです。3番目の引数は、どのクラスを指定するかを指定しますUIApplication
。サブクラス化するつもりがない限り、3番目の引数UIApplication
を指定します。nil
4番目の引数は、どのクラスをUIApplicationのデリゲートクラスにするかを指定します。これは、UIApplicationDelegate
プロトコルで指定されたものすべてに応答します。すべてのXcodeテンプレートに含まれているため、これを直接操作する必要はありません。
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
NSStringFromClass([AppDelegate class]))
ビットがあなたを投げさせないでください。これは、後で名前を変更した場合に適切なデリゲートが呼び出されるように、4番目の引数を指定するためのすばらしい方法ですAppDelegate.m
。
UIApplication
メインイベントループを開始し-application:didFinishLaunchingWithOptions:
、デリゲートが処理する必要のあるメソッドの1つであるを呼び出します。を見てくださいAppDelegate.m
。このメソッドのテンプレートコードがいくつか見つかります。ここで、カスタマイズを開始し、作成する前に配置する必要のあるものUIWindow
やその他のインスタンスをUIView
作成できます。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
これで、アプリケーションウィンドウとルートビューコントローラーが定義され、アプリがオフになって実行されます。
これらすべて、およびかなり多くのことが、ここでうまく説明されています:http: //oleb.net/blog/2012/02/app-launch-sequence-ios-revisited/