你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> 通俗易懂的講解iphone視圖控制器的生命周期

通俗易懂的講解iphone視圖控制器的生命周期

編輯:關於IOS

IOS 視圖控制器的生命周期非常非常重要,所以我有必要寫個文章來和大家一起探討問題。

今天在ios教程學習視圖控制器的生命周期,也看了一下網上的一些資料,但總覺得不是那麼好理解,首先我們來看一張圖:

通俗易懂的講解iphone視圖控制器的生命周期

先粗略講一下ios代碼:

通俗易懂的講解iphone視圖控制器的生命周期

看這段源碼就可以理解上面的那句話.這句話的意思就是說,如果view不存在,就會觸發loadView方法

通俗易懂的講解iphone視圖控制器的生命周期

這話的意思是說如果不用nib方式,就可以在子類中自定義視圖樹,但不要直接去調用loadview方法。

再下一步問,是否是自定義方法Custom Method?(也可以看成是自定義視圖)如果是,就調用自定義方法,如果不是,就要再進一步詢問,是否是StoryBoard 如果是就從StoryBoard加載(調用load From storyBoard),如果不是就直接創建一個empty View.

 

 

通俗易懂的講解iphone視圖控制器的生命周期

上面這段代碼只需要關心第一句就可以了,它的意思說,調用viewDidLoad方法後就view視圖就加載完成了。

從上面這張圖中我們可以看到調用viewDidLoad方法前View一直是nil,調用viewDidLoad方法後View才有值了。

總之一句話,調用了viewDidLoad方法後就創建了View這句話就這麼簡單。

比較難理解的是loadview方法,這裡面非常關鍵。這裡需要重點說明。

如果你不重寫loadview方法,系統就會調用其父類的方法,這個不難理解.

但如果你重寫了這個方法,打比方,你不調用[super loadview] 應用程序界面就是黑的,因為你的view一直沒有被創建。

 

//
//  MainViewController.m
//  Controller
//
//  Created by king on 13-7-7.
//

#import "MainViewController.h"

@interface MainViewController ()

@end

@implementation MainViewController

-(id)init{
self = [super init];
if(self){
//這裡不要調用self.view
}
return self;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
//這裡不要調用self.view
}
return self;
}

-(void)loadView{
//這裡你要麼調用[super loadview]方法創建view
// 要麼你自己自定義view ,給view賦值
// [super loadView];

UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
view.backgroundColor = [UIColor yellowColor];
self.view = view;
[view release];
NSLog(@"viiew %@",self.view);
}

- (void)viewDidLoad
{
[super viewDidLoad];
// NSLog(@"View %@",self.view);這裡調用self.view方法要注意的事項,調用self.view方法的時候請確保view不是nil否則程序會引起錯亂。

// Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved