トップ «前の日記(2012-10-01) 最新 次の日記(2012-10-04)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|

2012-10-02 [iOS]画面遷移(ビューコントローラについて)

何事も試してみないと分からない。今回は少しおかしいと思う事もあえてやってみる。

ビューを管理するものといてビューコントローラがあるが、それをInterface Builderを使わないで作成してみよう。

新規ファイルとして、UIViewControllerのサブクラスを作成。ビューコントローラの実装が必要なメソッドにデバッグ出力を埋め込んでみた。

#import <UIKit/UIKit.h>
 
@interface MyViewController : UIViewController
@end
#import "MyViewController.h"
 
@interface MyViewController ()
- (void)_init;
@end
 
@implementation MyViewController
 
- (id)init
{
    DBGMSG(@"%s", __func__);
    self = [super init];
    if (self) {
        [self _init];
    }
    return self;
}
 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    DBGMSG(@"%s", __func__);
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        [self _init];
    }
    return self;
}
 
- (id)initWithCoder:(NSCoder *)aDecoder
{
    DBGMSG(@"%s", __func__);
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self _init];
    }
    return self;
}
 
- (void)_init
{
    DBGMSG(@"%s", __func__);
}
 
- (void)dealloc
{
    DBGMSG(@"%s", __func__);
}
 
- (void)loadView
{
    DBGMSG(@"%s", __func__);
    [super loadView];
}
 
- (void)viewDidLoad
{
    DBGMSG(@"%s", __func__);
    [super viewDidLoad];
	// Do any additional setup after loading the view.
}
 
- (void)viewDidUnload
{
    DBGMSG(@"%s", __func__);
    [super viewDidUnload];
}
 
- (void)viewWillAppear:(BOOL)animated
{
    DBGMSG(@"%s", __func__);
    [super viewWillAppear:animated];
}
 
- (void)viewDidAppear:(BOOL)animated
{
    DBGMSG(@"%s", __func__);
    [super viewDidAppear:animated];
}
 
- (void)viewWillDisappear:(BOOL)animated
{
    DBGMSG(@"%s", __func__);
    [super viewWillDisappear:animated];
}
 
- (void)viewDidDisappear:(BOOL)animated
{
    DBGMSG(@"%s", __func__);
    [super viewDidDisappear:animated];
}
 
- (void)didReceiveMemoryWarning
{
    DBGMSG(@"%s", __func__);
    [super didReceiveMemoryWarning];
}
 
@end

そして、このビューコントローラのインスタンスを生成して、ビューを取り出してみる。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ....    
    self.myViewController = [[MyViewController alloc] init];
    ....
}

当たり前だが、viewDidLoad等は呼ばれない。つまり、ビューコントローラはInterface Builderで生成されるものということか?

_ ソースコード

GitHubからどうぞ。
https://github.com/murakami/workbook/tree/master/ios/TransitionView - GitHub

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)
本日のツッコミ(全1件) [ツッコミを入れる]
_ eienf (2012-10-02 23:50)

メモリ節約のためviewが実際にロードされるのはそれが表示されるときです。だからviewDidLoadもviewController.viewが最初に呼ばれた後になります。 <br> <br>nib内でView Controllerのインスタンスを書いていればnibが読み込まれたときに生成されるし、インスタンスを書いてなければ生成もされません。 <br> <br>iOS6からviewDidUnloadは呼ばれなくなっているなどView Controllerの管理方法には変更があるので確認したほうがいいです。


トップ «前の日記(2012-10-01) 最新 次の日記(2012-10-04)» 編集