iOSアプリの出発点は、常に通常のようなコードが含まれていますmain()
機能(感謝@bogatyr)で、
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
UIApplicationMain
の最後の2つのパラメータは重要であり、主要なクラス名を指定し、アプリケーションデリゲート。 nil
の場合、Info.plistはメインウィンドウxib(通常MainWindow.xib
)のために検索されます。
// If nil is specified for principalClassName, the value for NSPrincipalClass
// from the Info.plist is used. If there is no NSPrincipalClass key specified, the
// UIApplication class is used. The delegate class will be instantiated
// using init.
.. UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
XIBを通じてファイルの所有者を設定する必要はありません、そして、彼らはこのUIApplicationMain
機能で直接指定することができます。
principalClassName
は、文字列UIApplication
またはUIApplication
のサブクラスにすることができます。同様にdelegateClassName
もこのメソッドで直接指定できます。デリゲートクラスは、ドキュメントの通り、init
を使用してインスタンス化されます。文字列としてMyAppDelegate
、まずのUIApplicationのインスタンスがインスタンス化され
UIApplicationMain(int argc, char *argv[], nil, @"MyAppDelegate");
、その後、私が思うNSClassFromString
を使用して、この文字列から委譲クラスを作成します - 私たちは私たちの委譲クラスを指定したとします。
delegateObjectがインスタンス化され、アプリケーションが準備されると、このdelegateObjectには、委任メソッドdidFinishLaunchingWithOptions
を使用して通知されます。
Class delegateClass = NSClassFromString(@"MyAppDelegate");
id <UIApplicationDelegate> delegateObject = [[delegateClass alloc] init];
// load whatever else is needed, then launch the app
// once everything is done, call the delegate object to
// notify app is launched
[delegateObject application:self didFinishLaunchingWithOptions:...];
これは、nibが使用されていない場合、UIApplicationがプログラムで処理する方法です。真ん中のペン先を使うことはあまり変わらない。ユニバーサルのために
これは正しいです! "didFinishLaunchingWithOptions"は実行する最初のメソッドです! –