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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

iOS的生命周期

發布時間:2024/1/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS的生命周期 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • iOS應用程序一般都是由自己編寫的代碼和系統框架組成。系統框架提供了一些基本的infrastructure給APP來運行,而開發者則自己編寫代碼定制APP的外觀和行為,了解iOS infrastructure及其如何工作對編寫APP很有幫助。

Main函數入口

所有基于C編寫的APP的入口都是main函數,但iOS應用程序有點不同。不同就是你不需要為iOS應用程序而編寫main函數,當你使用Xcode創建工程的時候就已經提供了。除非一些特殊情況,否則你不應該修改Xcode提供的main函數實現。實例代碼見下

#import <UIKit/UIKit.h> #import "AppDelegate.h" int main ( int argc, char *argv[] ) { @autoreleasepool{ return UIApplicationMain(argc, argv ,nil , NSStringFromClass([AppDelegate class])); } }

上面實例代碼中有一個很重要的函數UIApplicationMain,它主要是創建APP的幾個核心對象來處理一下過程:
1,從 可用Storyboard文件加載用戶界面;
2,調用APPDelegate自定義代碼來做一些初始化設置
3.強將APP放入Main Run Loop環境中來影響和處理與用戶交互產生的事件。

應用程序的架構。

iOS的應用程序都遵循Model-View-Controller的架構,Model負責存儲數據和處理業務邏輯,View負責顯示數據和用戶交互,Controller是兩者的中介,協調Model和View相互協作。它們的通訊規則如下。
1.Controller能夠訪問Model和View,Model和View不能相互訪問



2.當View與用戶交互產生事件時,使用target-action方式來處理。


3.當View需要處理一些特殊UI邏輯或獲取數據源時,通過delegate或data source方式交給Controller來處理


4.Model不能直接與Controller通信,當Model有數據更新時,可以通過Notification或KVO(Key Value Observing)來通知Controller更新View



了解iOS的MVC設計模式之后,我們從下圖了解在NVC模式下iOS應用程序有哪些管家對象以及它們職責主要是什么?


  • UIApplication對象
    用戶與iOS設備交互時產生的事件(Multitouch Events,Motion Event,Remote Control Event)交互由UIApplication對象來分給control objects(UIControl)對應的target objects來處理并且管理整個事件循環,而一些關于APP運行時重要事件委托給app delegate來處理
  • App delegate對象
    APP delegate 對象遵循UIApplication Delegate協議,響應app運行時重要事件(app啟動,APP內存不足,APP終止,切換到另一個APP,切回APP),主要用于APP在啟動時初始化一些重要數據結構;例如,初始化UIWindow,設置一些屬性,為window添加rootViewController.
  • View controller對象
    View controller有一個view測你結構中的根view,你可以添加子view來構建復雜的view;Controller有一些viewDidLoad,viewWillAppear等方法來管理view的生命周期;由于它繼承UIResponder,所有還會響應和處理用戶事件。
  • Documents和data model對象
    data model對象主要用來存儲數據。例如,餓了么APP在搜索切換地址后,有歷史記錄搜索地址歷史當APP下次啟動時,讀取和顯示搜索地址歷史。
    document對象(繼承UIDocument)用來管理一些或所有的data model對象。document對象并不是必須的,但提供一種方便的方式來分組屬于單個文件或多個文件的數據。

  • UIWindow對象
    UIWindow對象位于view層次結構中的最頂層,它充當一個基本容器而不顯示內容,如果想顯示內容,添加一個content view到window。
    它也是繼承UIRsponder,所以它也是會響應和處理用戶事件。

  • View,control,layer對象
    Vew對象可以通過addSubview和removeFromSuperview等方法管理view的層次結構,使用layoutSubviews,layoutifNeeded和setNeedsLayout等方法布局view的層次結構,當你發現系統提供view已經滿足不了你想要的外觀需求時,可以重寫drawRect方法或通過layer屬性來構造復雜的圖形外觀和動畫。還有一點,UIView也是繼承UIResponder,所以也能夠處理用戶事件。
    Control對象通常就是處理特定類型用戶交互的View,常用的有button,switch,text field等。
    除了使用View和control來構建View層次結構來影響APP外觀之外,還可以使用 Core Animation 框架的Layer對象來渲染view外觀和構建復雜的動畫。

    Main Run Loop

    一個iOS應用程序的main run loop主要作用是處理所有與用戶相關的事件。UIApplication對象在啟動就設置main run loop 和使用它來處理事件和更新基于view的界面。正如它的名字顯示,main run loop是運行在應用程序的主線程。這樣就確保與家收到用戶相關的事件被有序地處理。
    下入顯示main run loop 的架構和用戶事件最終是怎樣被引用程序處理。當用戶與設備交互時,系統就會生成與交互關聯的事件,然后被應用程序的UIKit通過一個特殊的端口來分發。應用程序把事件放入隊列,然后逐個分發到main run loop來執行。UIApplication對象是第一個對象接收事件,然后決定怎樣處理它。一個touch event通常都被分發到main window對象,然后依次分發到發生觸碰的view。其它event的接收事件對象路徑可能有點不同。

大多數的事件通過使用main run loop 來分發,但是有些就不會。有些事件被發送到一個delegate對象或傳遞到你提供的block中。

應用程序的狀態和多任務

有時系統會從APP一種狀態切換到另一種狀態響應系統發生的事件。例如,當用戶按下Home鍵,電話打入或其他終端發生時,當前運行的應用程序會切換狀態來響應。應用程序的狀態有以下幾種:


  • Not running:APP還沒運行
  • Inactive:APP運行在foreground但沒有接收事件
  • Active: APP運行在foreground和正在接收事件
  • Background:運行在background和正在運行代碼
  • Suspended:運行在background但沒有執行代碼

大多數發生狀態轉換時都會調用delegate對象對應的方法響應APP的狀態改變。下面匯總了delegate對象的所有方法,當APP狀態發生轉換時,你可能會使用到它們

  • application:willFinishLaunchingWithOptions: - 這個方法是你在啟動時的第一次機會來執行代碼
  • application:didFinishLaunchingWithOptions:- 這個方法允許你在現實APP給用戶之前執行最后的初始化操作;
  • applicationDidBecomeActive:- app已經切換到active狀態后需要執行的操作。
  • applicationWillResignActive:- app江陽從前臺切換到后臺需要時執行的操作
  • applicationDidEnterBackground:- app已經進入后臺后需要執行的操作
  • applicationWillEnterForeground:- APP將要從后臺切換到前臺需要執行的操作,但APP還不是active狀態
  • applicationWillTerminate:- app將要結束時需要執行的操作



文/簫聲_筱昇(簡書作者)
原文鏈接:http://www.jianshu.com/p/550e5b1d4779
著作權歸作者所有,轉載請聯系作者獲得授權,并標注“簡書作者”。

iOS -> 視圖的生命周期 與 應用程序的生命周期

字數469?閱讀153?評論0?

1、視圖的生命周期

1、 alloc 創建對象,分配空間 2、 init (initWithNibName) 初始化對象,初始化數據 3、 loadView 從nib載入視圖 ,除非你沒有使用xib文件創建視圖 4、 viewDidLoad 載入完成,可以進行自定義數據以及動態創建其他控件 5、 viewWillAppear視圖將出現在屏幕之前,馬上這個視圖就會被展現在屏幕上了 6、 viewDidAppear 視圖已在屏幕上渲染完成 7、viewWillDisappear 視圖將被從屏幕上移除之前執行 8、viewDidDisappear 視圖已經被從屏幕上移除,用戶看不到這個視圖了 9、dealloc 視圖被銷毀,此處需要對你在init和viewDidLoad中創建的對象進行釋放. 10、viewVillUnload- 當內存過低,即將釋放時調用; 11、viewDidUnload-當內存過低,釋放一些不需要的視圖時調用。

2、應用程序的生命周期

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,當程序被推送到后臺的時候調用。所以要設置后臺繼續運行,則在這個函數里面設置即可: - (void)applicationDidEnterBackground:(UIApplication *)application 6,當程序從后臺將要重新回到前臺時候調用,這個剛好跟上面的那個方法相反: - (void)applicationWillEnterForeground:(UIApplication *)application 7,當程序將要退出是被調用,通常是用來保存數據和一些退出前的清理工作: - (void)applicationWillTerminate:(UIApplication *)application

轉載于:https://www.cnblogs.com/tangyuanby2/p/6108531.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

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

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