[iOS]無視されたmain関数

4843 ワード

Cベースのアプリケーションと同様に、プログラムが起動するメインエントリポイントはiOSアプリケーションのmain関数です.iOSアプリケーションではmain関数の役割は少ないです.その主な仕事はUIKET frameworkを制御することです.したがって、Xcodeで新しいプロジェクトを作成するには、デフォルトのメイン関数が備えられています.少数の特別な例外を除いて、あなたは永遠にこの関数の実現を変えるべきではありません.
#import 
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

UIAPplicationMain関数には4つのパラメータがあり、これらのパラメータを使用してアプリケーションを初期化します.この関数に渡されるデフォルト値を変更するべきではありません.それでも、目的とアプリケーションの起動方法を理解することは価値があります.
関数のプロトタイプ:
UIKIT_EXTERN int UIApplicationMain(int argc, char *argv[], NSString * __nullable principalClassName, NSString * __nullable delegateClassName);

パラメータの説明:
Argcとargv:はISO C規格のmain関数のパラメータであり,UIApplicationMainに直接渡して相関処理を行う.パラメータには、アプリケーションがシステムから起動するタイミングなどの情報が含まれます.これらのパラメータはUImitのインフラストラクチャによって解析されます.そうでなければ無視できます. 
principalClassName:このパラメータは、UIApplicationクラスから継承する必要があるアプリケーションのクラス名を識別します.これはアプリケーションの実行を担当するクラスです.このパラメータにnilを渡すことをお勧めします.
delegateClassName:アプリケーションクラスのプロキシクラスです.アプリケーションのエージェントは、システムとコードの間の高度なインタラクションを管理します.Xcodeのプロジェクトテンプレートでは、このパラメータが自動的に適切な値に設定されます.
UIAPplicationMain関数のもう一つのことは、アプリケーションのプライマリ・ユーザー・インタフェース・ファイルをロードすることです.メインインタフェースファイルには、アプリケーションのユーザーインタフェースに表示される初期ビューに関連するオブジェクトが含まれます.storyboardを使用するアプリケーションでは、この関数はstoryboardの初期ビューコントローラとアプリケーションエージェントが提供するウィンドウから実行されます.nibファイルを使用するアプリケーションでは、nibファイルの内容をメモリにロードしますが、アプリケーションのウィンドウでは実行されません.アプリケーションが委任したメソッドで次の方法を実行する必要があります.
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions NS_AVAILABLE_IOS(6_0);

1つのアプリケーションには、プライマリstoryboardファイルまたはプライマリnibファイルがありますが、互換性はありません.storyboardsは、アプリケーションのユーザーインタフェースを指定するのに優先されていますが、すべてのバージョンのiOSはサポートされていません.アプリケーションマスターstoryboardのファイル名はアプリケーションのInfoにあるはずです.plistファイルのUIMAINStoryboardFileキー値に設定します.(nibファイルベースのアプリケーションの場合、あなたのマスターnibファイルの名前はNSMainNibFileキー値に設定する必要があります.)通常、Xcodeはプロジェクトの作成時に該当するキーの値を作成しますが、必要に応じて変更できます.
プライマリnibファイルが存在する場合は、nibファイルオブジェクトにApplicationオブジェクトと接続するdelegateを探します.この関数はprincipalClassNameに基づいてUIApplicationオブジェクトを作成し、delegateClassNameに基づいてdelegateオブジェクトを作成し、UIApplicationオブジェクトのdelegateプロパティをdelegateオブジェクトに設定します.
プログラムの起動時:
アプリケーションが起動した場合(フロントにアクセスしてもバックグラウンドにアクセスしても)、次の方法で操作する必要があります.
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions NS_AVAILABLE_IOS(6_0);
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions NS_AVAILABLE_IOS(3_0);

①起動オプション辞書の内容をチェックし、プログラムの起動方法を確認し、適切な反応を示す.
②アプリケーションのキーデータ構造を初期化します.
③アプリケーションのウィンドウとビューを表示する準備をしてください.
OpenGL ESを使用するアプリケーションは、この方法を使用して図面環境を準備するべきではありません.逆に彼らは
- (void)applicationDidBecomeActive:(UIApplication *)application;

メソッド呼び出し時にOpenGL ES描画メソッドを起動します.
アプリケーションが起動時にプライマリstoryboardまたはnibファイルを自動的にロードしない場合は、
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

アプリケーションを作成するウィンドウ表示.縦と横を同時にサポートするアプリケーションでは、メインウィンドウのルートビューコントローラを縦方向に常に設定します.デバイスが異なる方向に起動している場合、ルートビューコントローラはウィンドウの回転情報を表示し、正しい方向を維持するように伝えます.
アプリケーション
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

方法は、アプリケーションの起動時間を短縮するために、できるだけ軽量にする必要があります.アプリケーションは、自身を起動して初期化し、5秒未満のイベントの処理を開始すると予想されます.アプリケーションが起動サイクルをタイムリーに完了しない場合、システムはそれを殺します.したがって、ネットワークへのアクセスなどの起動が遅いタスクは、非同期アシストスレッドで実行する必要があります.
プログラムがフロントに起動すると、システムはまた呼び出されます.
- (void)applicationDidBecomeActive:(UIApplication *)application;

フロントへの移行を完了する方法です.この方法は、起動時にバックグラウンドからフロントに移行するときに呼び出されるため、共通の2つの遷移の任意のタスクを実行するために使用されます.
プログラムがバックグラウンドで実行される場合、イベントが到着する処理を準備する以外に、アプリケーションに多くのタスクをさせるべきではありません.