国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOS中的生命周期

2019-11-14 19:09:25
字體:
來源:轉載
供稿:網友

對于一個iOS app來講,生命周期是一個十分至關重要的東西。對于一個app來講控制著app的開啟、睡眠、關閉等狀態;對于一個頁面的來講,控制頁面的加載、顯示、消失;對于一個View或者一個普通的類來講,控制著初始化、繪制、釋放。

一、AppDelegate

當你創建一個iOS項目時,在appDelegate中你會看到如下六個方法,他們分別控制著不同的app生命周期

 

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

當app完成加載時,此方法會被調用。此方法在app啟動時只會執行一次。一般app的根窗口會在此方法中創建。調用后app處于激活狀態。launchOptions中包含很多用戶信息,可以通過如UIApplicationLaunchOptionsRemoteNotificationKey等Key來獲取相關的用戶信息

示例(非storyboard/xib方式):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    NSDictionary* userInfo = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];            self.viewController = [[ViewController alloc] init];    self.window.rootViewController = self.viewController;    [self.window makeKeyAndVisible];    return YES;}

 

-(void)applicationWillResignActive:(UIApplication *)application;

當app正在使用時,遇到來電、鎖屏、回到home頁、跳轉到其他app并且app掛起不在后臺運行的時候,此方法會被調用。調用后app處于掛起狀態。此方法調用于applicationDidEnterBackground之前。

 

-(void)applicationDidEnterBackground:(UIApplication *)application;

當app正在使用時,遇到來電、鎖屏、回到home頁、跳轉到其他app并且app需要后臺運行的時候(蘋果允許local,music,voip,notifaction在后臺中運行),此方法會被調用。調用后app處于后臺運行狀態。

 

-(void)applicationWillEnterForeground:(UIApplication *)application;

當app從后臺運行狀態切換到前臺運行時,此方法會被調用。調用后app處于未激活狀態。此方法調用于applicationDidBecomeActive之前。

 

-(void)applicationDidBecomeActive:(UIApplication *)application;

當app被重新激活時,此方法會被調用。此方法應用在app之前已經被打開,但是不處于激活狀態,而在此跳轉到激活狀態的情況。每次跳轉到app中,此方法都會被調用。調用后app處于激活狀態。

 

-(void)applicationWillTerminate:(UIApplication *)application;

當手機關機或者雙擊home鍵,將app向上拖動致使完全退出時,此方法會被調用。此方法執行之后app的進程會被殺死。

 

二、UIViewController

 

對于一個頁面來講,你有8個生命周期可以控制

-(void)awakeFromNib;

但使用storyboard或者xib時,在讀取上面的布局之前,此方法會被調用。此方法早于其他方法調用,晚于初始化。在一個頁面中,此方法只會被調用一次。

-(void)viewDidLoad;

讀取storyboard或者xib的布局之后此方法會被調用。此方法晚于awakeFromNib調用,早于其他方法。在一個頁面中,此方法只會被調用一次。多用于初始化頁面布局與全局布局相關變量。

 

-(void)viewWillAppear:(BOOL)animated;

當頁面即將出現時,此方法會被調用。當頁面之間跳轉有動畫時,此方法在動畫開始時被調用。

 

-(void)viewDidAppear:(BOOL)animated;

當頁面已經完全出現時,此方法會被調用。當頁面之間跳轉有動畫時,此方法會在動畫結束時被調用。

 

-(void)viewWillDisappear:(BOOL)animated;

當頁面即將消失時,此方法被調用。當頁面之間跳轉有動畫時,此方法在動畫開始時被調用。

 

-(void)viewDidDisappear:(BOOL)animated;

當頁面已經完全消失時,此方法會被調用。當頁面之間跳轉有動畫時,此方法會在動畫結束時被調用。

 

-(void)viewWillLayoutSubviews;

當頁面布局即將發生全部變動時(多用于橫屏視屏翻轉),此方法會被調用,此方法在翻轉動畫開始時被調用。

 

-(void)viewDidLayoutSubViews;

當頁面布局變動結束時(多用于橫屏視屏翻轉),此方法會被調用,此方法在翻轉動畫結束時被調用。

 

三、View & NSObject

-(void)layoutSubviews;

當View中調用addSubView、view的Frame被重新設置、滾動一個UIScrollView、旋轉屏幕時,此方法會被調用。改變一個UIView大小的時候也會觸發父UIView上的layoutSubviews事件。

 

-(void)drawRect:(CGRect)rect;

重繪一個View時,此方法會被調用。

 

-(void)dealloc;

一個View或者NSObject被釋放時,此方法會被調用。NSNotification等可能會造成野指針、也通知的變量需要在此手動釋放。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘洛县| 蕉岭县| 阳曲县| 饶平县| 子洲县| 寿宁县| 台江县| 崇阳县| 霍邱县| 龙陵县| 武强县| 霍山县| 老河口市| 梁河县| 民乐县| 元朗区| 五台县| 宁武县| 常山县| 武平县| 积石山| 津市市| 湖州市| 天气| 新竹市| 浦县| 丽江市| 辛集市| 香格里拉县| 南安市| 儋州市| 图片| 讷河市| 郯城县| 南汇区| 金昌市| 河西区| 隆安县| 内江市| 东光县| 昌乐县|