最終更新:2024-04-09 (火) 02:58:52 (11d)
Objective-C/起動プロセス
Top / Objective-C / 起動プロセス
AppKit
UIKit
main.m
- main - エントリポイント
- UIApplicationMain - アプリケーションオブジェクト(UIApplication)/UIApplicationDelegate(AppDelegate)の生成
- Info.plistを読み込んでStoryboardを読み込む
例:Single View Application
#import <UIKit/UIKit.h> #import "AppDelegate.h" int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } }
AppDelegate.m (AppDelegate - UIApplicationDelegate)
- UIApplicationDelegate application:didFinishLaunchingWithOptions: - ウィンドウ(UIWindow)の作成や、呼び出すViewControllerを作成
- UIViewController initWithNibName:bundleで初期化
例:Single View Application
- Storyboardを使う場合
- Storyboardのファイル名はInfo.plistに含まれている。
- Xcode/Identity InspectorのCustom Classで選択されているUIViewControllerのサブクラスがインスタンス化される
- 選択を解除するとViewControllerは読み込まれない(デフォルトのUIViewControllerで処理される)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. return YES; }
- Storyboardを使わない場合
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; } else { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; } self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; }
ViewController.m (ViewController - UIViewController)
- initWithNibName?
- viewDidLoad - ビューのロードが終わった時
- viewWillAppear? - 画面の表示される直前
- viewWillLayoutSubviews?
- viewDidLayoutSubviews?
- viewDidAppear? - 画面の表示が行われた直後
例:Single View Application
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. }
メモ
- UIApplicationDelegate application:willFinishLaunchingWithOptions:およびUIApplicationDelegate application:didFinishLaunchingWithOptions:メソッドは、できるだけ軽量の実装にして、起動時間を短縮しなければなりません。
- 起動後、必要な初期化を行い、イベント処理を開始するまで、5秒以内で完了するようにしてください。それ以上かかる場合、システムは応答がないものと判断し、アプリケーションを強制的に終了してしまいます。
その他
アクティブ化(フォアグラウンド化/起動)した時
- UIApplicationDelegate application:didFinishLaunchingWithOptions: -> applicationDidBecomeActive
- applicationWillEnterForeground -> applicationDidBecomeActive