iOS生命周期剖析

load初始化方法<加載到內存就會執行,不需要觸發,且只會調用一次>

+ (void)load
只要加載內存中就會調用,如果沒有觸發該事件也會調用。
在main函數之前調用
ViewController.h //父類
+ (void)load{
    NSLog(@"load父類");
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NestViewController *nest =[[NestViewController alloc]init];    
    [self.navigationController pushViewController:nest animated:YES];   
}
NestViewController 繼承自 ViewController //子類
+ (void)load{
   
    NSLog(@"load_____子類______");
}

打印結果:


load方法

類的初始化方法<創建對象才會執行,需要觸發才會執行,且只會調用一次>

+ (void)initialize
1.函數并不會每次創建對象都調用,只有這個類第一次創建對象時才會調用。
2.只有創建對象才會被調用,而且只會調用一次,如果子類重寫了該方法,當子類創建的時候也只會調用一次,如果子類沒有實現該用法,則會調用父類中的該方法。
在main函數之后調用
ViewController.h //父類
+ (void)initialize{
 NSLog(@"父類 initialize ");
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NestViewController *nest =[[NestViewController alloc]init];
    [self.navigationController pushViewController:nest animated:YES];
    
}

NestViewController 繼承自 ViewController //子類
//如果子類沒有實現該方法,則會調用父類中的該方法,
+ (void)initialize{
    NSLog(@"子類 initialize "); 
}

打印


initialize方法.png

對象的初始化方法

- (instancetype)init
init方法和initCoder方法相似,只是調用的方式不一樣,如果用代碼進行初始化,會調用init;如果從nib文件進行初始化,會調用initCoder。

加載視圖的方法

- (void)loadView
每次訪問UIViewControllerview(比如controller.view、self.view)而且view為nil,loadView方法就會被調用
loadView方法是用來負責創建UIViewControllerview

view創建完畢后調用

- (void)viewDidLoad
界面上的初始化操作。例如比如往view中添加一些子視圖、從數據庫或者網絡加載模型數據裝配到子視圖中
在類創建后,無論視圖的展現或消失,這個方法也是只會在將要布局時調用一次

視圖將要展現時會調用

- (void)viewWillAppear:(BOOL)animated

視圖已經展現時會調用

- (void)viewDidAppear:(BOOL)animated

視圖將要消失時調用

- (void)viewWillDisappear:(BOOL)animated

視圖已經消失時調用

-(void)viewDidDisappear:(BOOL)animated

在viewWillAppear后調用,將要對子視圖進行布局

-(void)viewWillLayoutSubviews

已經布局完成子視圖

-(void)viewDidLayoutSubviews

被釋放調用(可測試當前控制器有沒有被釋放)

-(void)dealloc

內存警告(開發中幾乎不管他)

-(void)didReceiveMemoryWarning

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容