10

iOSアプリケーションで実行の制御がどのように流れるかを誰かに説明してもらえますか?UIApplicationMainが最初にmainから呼び出されることを知っています。じゃあ何?定義したメソッドとメインの関係は何ですか?それはすべてイベント駆動型ですか、それとも構造化されたシーケンスがありますか?

漠然としているわけではありません。どこから始めればよいのかを知る必要があります。おそらく私はこれを間違った方法で見ています。

たとえば、C ++では、次のようにします。

#include "myMethods.h"
int main (int argc, char * const argv[]) {

   Method1(); // Initialization
   Method2(); // Opening views and options
   Method3(); // Meat of the program

   return 0;
}

前もって感謝します。

4

3 に答える 3

19

したがって、あなたが述べたように、のmain()関数main.mは開始点であり、それは次にを呼び出しますUIApplicationMain()UIApplicationMainドキュメントを確認すると、次の4つの引数が必要であることがわかります。

  • argc、
  • * argv []、
  • *principalClassName
  • *delegateClassName。

それらの最初の2つは、から渡された引数カウントと変数リストだけmain()です。ただし、3番目と4番目の引数はNSStringsへのポインターです。3番目の引数は、どのクラスを指定するかを指定しますUIApplication。サブクラス化するつもりがない限り、3番目の引数UIApplicationを指定します。nil4番目の引数は、どのクラスを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/

于 2012-05-08T21:08:55.383 に答える
8

あなたが言ったように、UIApplicationMainはシステムでアプリケーション実行を作成します。アプリケーションのロードプロセスが行うことの中で、特定のアプリケーションに関連するものに関心があると思います。また、Xcodeが提供する多くのプロジェクトテンプレートに示されている典型的なケースを想定しています。

アプリケーションのロードプロセスは、アプリケーションの情報プロパティリストを調べます。そこで「メインnibファイルのベース名」が見つかり、アプリケーションのUIApplicationインスタンスがアプリケーションバンドルから対応するnibファイルをロードします。このnibファイルは、アプリケーションデリゲートクラスを指定し、クラスのインスタンスをUIApplicationインスタンスのデリゲートプロパティに接続するように指示します。

メインのnibファイルによっては、アプリケーションのウィンドウ、メインのView Controllerなど、他のオブジェクトも作成および接続される場合があります。

これでロードシーケンスが終了し、アプリケーションデリゲートクラスから有名な-applicationDidFinishLaunching:メッセージを取得するまで、すべてがイベント駆動型になります。

于 2011-02-22T20:47:06.327 に答える
2

AppleDocumentsから-

アプリケーションのライフサイクルは、アプリケーションの起動から終了までの間に発生する一連のイベントを構成します。iOSでは、ユーザーはホーム画面のアイコンをタップしてアプリケーションを起動します。タップが発生した直後に、システムはいくつかの遷移グラフィックを表示し、メイン関数を呼び出してアプリケーションの起動に進みます。この時点から、初期化作業の大部分はUIKitに渡され、UIKitはアプリケーションのメインnibファイルをロードして、イベントループの準備をします。

アプリケーションのライフサイクル

于 2011-02-22T20:45:24.643 に答える