日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS-应用生命周期

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS-应用生命周期 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

int main(int argc, char *argv[])

{

@autoreleasepool {

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

}

}

main函數的兩個參數,iOS中沒有用到,包括這兩個參數是為了與標準ANSI C保持一致。 UIApplicationMain函數,前兩個和main函數一樣,重點是后兩個。后兩個參數分別表示程序的主要類(principal class)和代理類(delegate class)。如果主要類(principal class)為nil,將從Info.plist中獲取,如果Info.plist中不存在對應的key,則默認為UIApplication;如果代理類(delegate class)將在新建工程時創建。

1、每個應用程序都有屬于自己的UIWindow(分為:1、狀態欄,2、下面控制器控制的UIView),UIWindow繼承自UIView

2、每個控制器都有默認的UIView.

3、一個控制器管理一個UIView.

?

在PC中,應用程序多是使用視窗的形式顯示內容,手機應用也不例外,手機應用中要在屏幕上顯示內容首先要創建一個窗口承載內容,iOS應用中使用UIWindow、UIView來實現內容顯示。

UIWindow:

UIWindow對象是所有UIView的根視圖,管理和協調的應用程序的顯示、分發事件給View。UIWindow類是UIView的子類,可以看作是特殊的UIView。一般應用程序只有一個UIWindow對象,即使有多個UIWindow對象,也只有一個UIWindow可以接受到用戶的觸屏事件。UIWindow初始化在AppDeleDgate里面的didFinishLaunchingWithOptions方法。

UIView:

UIView類繼承自UIResponder,負責在屏幕上定義一個矩形區域,視圖用于展示界面及響應用戶界面交互。每個視圖對象都要負責渲染視圖區域的內容,并響應該區域中發生的操作事件。除了顯示內容和處理事件之外,視圖可以嵌套并管理子視圖。子視圖是指嵌入到另一視圖對象內部的視圖對象,而被嵌入的視圖對象是父視圖。視圖添加到window中就會顯示出來。


?

根據UIApplicationMain函數,程序將進入AppDelegate.m,這個文件是xcode新建工程時自動生成的。

1、告訴代理進程啟動但還沒進入狀態保存

- (BOOL)application:(UIApplication*)application willFinishLaunchingWithOptions:(NSDictionary*)launchOptions

2、在應用程序加載完畢之后調用

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

3、程序失去焦點的時候調用(不能跟用戶進行交互了)當應用程序將要入非活動狀態執行,在此期間,應用程序不接收消息或事件,比如來電話了

- (void)applicationWillResignActive:(UIApplication*)application

4、當應用程序獲取焦點的時候調用-獲取焦點之后才可以跟用戶進行交互當應用程序入活動狀態執行,這個剛好跟上面那個方法相反

- (void)applicationDidBecomeActive:(UIApplication*)application

5、當程序被推送到后臺的時候調用。所以要設置后臺繼續運行,則在這個函數里面設置即可 (點擊HOME鍵)

- (void)applicationDidEnterBackground:(UIApplication *)application

6、當程序從后臺將要重新回到前臺時候調用,這個剛好跟上面的那個方法相反。

- (void)applicationWillEnterForeground:(UIApplication *)application

7、當程序將要退出是被調用,通常是用來保存數據和一些退出前的清理工作。這個需要要設置UIApplicationExitsOnSuspend的鍵值。

- (void)applicationWillTerminate:(UIApplication *)application


?

初次啟動:

iOS_didFinishLaunchingWithOptions

iOS_applicationDidBecomeActive

按下home鍵:

iOS_applicationWillResignActive

iOS_applicationDidEnterBackground

點擊程序圖標進入:

iOS_applicationWillEnterForeground

iOS_applicationDidBecomeActive


?

當應用程序進入后臺時,應該保存用戶數據或狀態信息,所有沒寫到磁盤的文件或信息,在進入后臺時,最后都寫到磁盤去,因為程序可能在后臺被殺死。釋放盡可能釋放的內存。

- (void)applicationDidEnterBackground:(UIApplication *)application

方法有大概5秒的時間讓你完成這些任務。如果超過時間還有未完成的任務,你的程序就會被終止而且從內存中清除。

如果還需要長時間的運行任務,可以在該方法中調用:

[application beginBackgroundTaskWithExpirationHandler:^{

NSLog(@"begin Background Task With Expiration Handler");

}];

程序終止

程序只要符合以下情況之一,只要進入后臺或掛起狀態就會終止:

①iOS 4.0以前的系統

②app是基于iOS 4.0之前系統開發的。

③設備不支持多任務

④在Info.plist文件中,程序包含了 UIApplicationExitsOnSuspend 鍵。

系統常常是為其他app啟動時由于內存不足而回收內存最后需要終止應用程序,但有時也會是由于app很長時間才響應而終止。如果app當時運行在后臺并且沒有暫停,系統會在應用程序終止之前調用app的代理的方法 - (void)applicationWillTerminate:(UIApplication *)application,這樣可以讓你可以做一些清理工作。你可以保存一些數據或app的狀態。這個方法也有5秒鐘的限制。超時后方法會返回程序從內存中清除。

轉載于:https://www.cnblogs.com/onefboy/p/5718035.html

總結

以上是生活随笔為你收集整理的iOS-应用生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。