---
# System prepended metadata

title: ios 第三週 0619
tags: [ios]

---

---
title: ios 第三週 0619
tags: ios
---
> [👩‍💻 回主頁](https://hackmd.io/@janice-code/after_school_ios)

> [內文參考來源](https://chunyeung.medium.com/swift-%E8%AB%87%E8%AB%87%E5%B9%BE%E5%80%8B%E9%87%8D%E8%A6%81%E7%9A%84-ios-app-life-cycle-%E7%94%9F%E5%91%BD%E9%80%B1%E6%9C%9F-93380fe93d95)
## 生命週期
![](https://i.imgur.com/YXdd3K4.png)

:::info
使用 app transitions 執行以下任務：
* 在啟動時，初始化 app 的資料結構及 UI。
* App 活化時，完成配置 UI 並準備與用戶互動。
* App 停用後，保存數據並靜止 app 的行為。
* 進入後台狀態後，完成關鍵任務、盡可能釋放內存，並準備 app 快照。
* 終止時，立即停止所有的工作，並釋放所有共享的資源。
:::

- Not Running：
在一開始 App 還沒點開 / App 已被關閉後，App 的狀態就會在這邊，此時 App 不會給在記憶體當中。
- Inactive：
當我們點開 App 後，App 的狀態就會轉為 Inactive，此時 App 開始做一點 SetUp，但是我們還不能使用它。很多 App 在此時都會使用一些準備畫面來渡過這個階段。
- Active：
此時 App 已經進入啟動的狀態，App 可以開始接收事件與回傳事件。UI 也可以開始運作，也就是我們平常在用的 App。
- Background：
當我們把 App 關掉或換另一個 App，如按 Home 鍵後。App 就會進入 Inactive 狀態與 Background。此時，App 都還是在運作的狀態，但是 Interface 就不會進行更新或顯示。在幾秒之後，App 就會入進 Suspended 狀態。
- Suspended：
當 App 進入 Suspended 狀態，App 就不能再執行任何的程度碼，但它仍然在記憶體中存放著。當下一次我們重新打開 App時，App 就會重新回到 Background，再回到 Inactive，最後達到 Action ，進入可以使用的狀態。
---

![](https://i.imgur.com/1ZdIH3Y.png)
- viewDidLoad：
當 view 被載入到記憶體後，但畫面未被顯示之前，就會呼叫viewDidLoad。我們通常會重寫 (overrider) 這方法來增加對 view 的初始化。
- viewWillAppear：
這方法是當在 view 將呈現在畫面，且還沒有任何的動畫開始出現在畫面上時被呼叫的。我們可以重寫這個方法來執行與 view 關聯的自定義任務。例如，您可以使用此方法更改 status bar 的方向或樣式，以改變 status bar 即將在 view 呈現的樣子。
- viewDidAppear：
在 viewWillAppear 結束後，即 view 被載入後到 view controller 後，就會載入這個方法。同樣地，我們可以透過重寫來增加任務到已經呈現的 view。
- viewWillDisappear：
這個方法是當 view 將被移除，且動畫開始執行前呼叫的。我們可以重寫這個方法來改變 view 的各種狀態。如我們可以將被改變的 status bar 還原回來。
- viewDidDisappear：
當 view 被移除後，我們可以使用這個方法來後這時刻的自定義任務。
---

## MVC 架構
MVC分別是**Model(模型)、View(介面)與Controller(控制)**。從字面上來看就能知道，MVC把程式碼控制分為了三類：

* View：管理作為位圖展示到屏幕上的圖形和文字輸出
* Controller：翻譯用戶的輸入並依照用戶的輸入操作模型和視圖
* Model：管理應用的行為和數據，響應數據請求（經常來自視圖）和更新狀態的指令（經常來自控製器

![](https://i.imgur.com/On02L9W.png)


![](https://i.imgur.com/bkVY7S0.png)


動態網站是透過 Controller 請求 Model 的資料並傳給 View 來顯示。當使用者點擊連結或其它與網頁互動的操作時，都是透過 Controller 來負責給予相對的對應。當使用者有搜尋需求，輸入了某個關鍵字並按下搜尋按鈕後，負責接受這個動作的 Controller 就會讓 View 顯示搜尋的頁面，並向 Model 發出請求將使用者搜尋的相關資料給 View。修改個人資訊也是相同方式。

使用者與網頁的操作互動，全是依賴 Controller 來對 View 與 Model 發送或請求資訊。所以基本上 Controller 就是 View 與 Model 之間的協調者。也就是說 MVC 三者彼此都是獨立且有各自的職責，當某個部分需要修改時，都保證其它兩個不用去做更動與調整。以生活實際的例子來解讀 MVC 會更好理解。

:::warning

以生活情境來看MVC：

回想一下到 ATM 提款的印象。在 ATM 上所看到的畫面就是 View ，當插入卡片、輸入密碼、選擇金額這些操作都屬於 Controller ，它會負責將獲得的資訊去比對 Model 是否有資料，並請求 Model 進行數據變更（金額變更）。最後是否要顯示剩餘金額也是由 Controller 來負責去請求 Model，再給提供給 View 來顯示。
:::

## 實作

### Alert
```m
UIAlertController *alertController1 = [UIAlertController alertControllerWithTitle:@"大標題" message:@"小標題" preferredStyle:UIAlertControllerStyleAlert];
```
```
[self presentViewController:alertController animated:YES completion:nil];
```
### addAction
```
[alertController addAction: ShowButton];
```
![](https://i.imgur.com/jSNRTOj.jpg)
