iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 5
0
自我挑戰組

IOS app開發介紹系列 第 5

IOS app開發介紹 - IOS一些重要的概念與機制(1.App的生命週期與ViewController生命週期 )

  • 分享至 

  • xImage
  •  

IOS一些重要的概念與機制

1. App的生命週期與viewController生命週期
2. 記憶體管理(Auto Reference Counting)
3. Closure
4. Multi-threads
5. OperationQueue
6. Grand Central Dispatch (GCD)

這六個項目將會分成六篇來跟大家說明


1. App的生命週期與viewController生命週期

App的生命週期ViewController的生命週期是當app狀態改變(退到背景,重新啟動)和頁面顯示或頁面消失(進到下一頁或回到前一頁)時,我們需要在這些生命週期的function去做一些該做的事,以維持app的狀態,來符合使用者的期望。

要注意的是App的生命週期ViewController的生命週期的function皆為system callback,我們無法或不應該去主動呼叫這些function,由系統控制何時該執行到這些function,我們只要專注要在這些function中要做的事。


App的生命週期 (p.s 在AppDelegate中去控制)
didFinishLaunchingWithOptions --- app運作的起始點,可以在這裡把navigationController設為基底
applicationWillEnterForeground --- app從背景到前景
applicationDidBecomeActive
applicationWillResignActive
applicationDidEnterBackground --- app從前景到背景
applicationWillTerminate
didFinishLaunchingWithOptions

didFinishLaunchingWithOptions這個callback是整個app啟動時,執行的第一個function。我們可以在這裡去跟server拉資料更新使用者狀態或更新檔......等。

applicationDidEnterBackground這個callback是在使用者按下Home鍵回到手機首頁或叫起另一個app時,導致app退到背景,被系統呼叫執行到。這時我們應該要把一些需要儲存的狀態儲存起來,例如使用者目前在哪個階段或是已更改的資料
(p.s applicationDidEnterBackground應當和ViewController的viewWillDisappear有所區分,applicationDidEnterBackground儲存的狀態應該是不專屬於任何一個頁面,即Global的狀態,例如使用者登入狀態......等等)

applicationWillEnterForeground這個callback是在使用者重新打開app時,被系統呼叫執行到。這時我們應該根據存在UserDefaults或DB中的資料,決定app要到哪個頁面或更新UI或是否要更新資料。


ViewController的生命週期 (p.s 在每個ViewController中去控制)
在之前文章裡,我們有提到ViewController的生命週期:
init
loadView
viewDidLoad
viewWillAppear
viewDidAppear
viewWillDisappear
viewDidDisappear
viewWillUnload
viewDidUnload
dealloc

其中的兩個系統的callback(viewWillAppear & viewWillDisappear),
viewWillAppear : 當頁面重新顯示時,我們需要根據目前的狀態,去更新我們的UI
viewWillDisappear: 當頁面消失時(使用者按按鈕到下一頁或返回前一頁),使用者更新輸入資料或是選取某些選項,我們需要把這些更新後的狀態儲存起來(p.s 儲存在data model object or UserDefaults or DB)


上一篇
IOS app開發介紹 - 不同class溝通方式
下一篇
IOS app開發介紹 - IOS一些重要的概念與機制(2.記憶體管理 )
系列文
IOS app開發介紹22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言