iOS面試用到的一些知識點和技術,ios面試知識點
1、APP的生命週期和viewcontroler的生命週期?
答:APP的生命週期:在APP的代理中分為七個階段:
1.將要啟動
2.已經啟動
3.將要進入非使用中
4.進入後台
5.從後台進入前台
6.進入活動狀態
7.記憶體警示
viewcontroller的生命週期:(也是七個)
loadView->viewDidLoad->viewWillAppear->viewDidAppear->viewWillDisAppear->viewDidDisAppear->delloc
2、多線程:NSThread、NSOperation、GCD
NSOperation 是個抽象類別,並不具備封裝操作的能力,必須使⽤它的子類:
NSInvocationOperation (使用代理)
NSBlockOperation (使用block)
GCD---
Grand Central Dispatch
(GCD) 是Apple開發的一個多核編程的較新的解決方案
- GCD可用於多核的並行運算
- GCD會自動利用更多的CPU核心(比如雙核、四核)
- GCD會自動管理線程的生命週期(建立線程、調度任務、銷毀線程
- 程式員只需要告訴GCD想要執行什麼任務,不需要編寫任何線程管理代碼
學習GCD之前,先來瞭解GCD中兩個核心概念:任務和隊列
任務:就是執行操作的意思,換句話說就是你線上程中執行的那段代碼。在GCD中是放在block中的。執行任務有兩種方式:同步執行和非同步執行。兩者的主要區別是:是否具備開啟新線程的能力。
- 同步執行(sync):只能在當前線程中執行任務,不具備開啟新線程的能力
- 非同步執行(async):可以在新的線程中執行任務,具備開啟新線程的能力
- 隊列:這裡的隊列指任務隊列,即用來存放任務的隊列。隊列是一種特殊的線性表,採用FIFO(先進先出)的原則,即新任務總是被插入到隊列的末尾,而讀取任務的時候總是從隊列的頭部開始讀取。每讀取一個任務,則從隊列中釋放一個任務。在GCD中有兩種隊列:串列隊列和並發隊列。
想要更詳細的瞭解GCD去看:http://www.jianshu.com/p/2d57c72016c6
- 3、單例、代理、屬性、通知、block的傳值技術?
- 屬性傳值很好理解。A->B 就在B的.h中暴露出一個屬性就可以了,在A中直接調用B的執行個體進行賦值就可以了。 也是最簡單的傳值方法
- 代理傳值 A->B 在A中聲明協議 在B中遵循協議 並實現協議方法就可以了 也比較簡單
- B->A 即反向傳值 在B中聲明協議 A中遵循協議----- 在A中push到B時遵循協議,設定代理 並實現代理方法 在B中pop回A時利用自己的代理執行代理方法(即把B中的值賦給代理方法中的參數即可) 是不是很簡單
- 只要記住 代理反向傳值 誰傳誰聲明協議 接收方實現代理方法 push前遵循通訊協定設定代理 pop前執行代理方法(賦值)
- block 傳值分為正向傳值和反向傳值
正向傳值 A->B 在A中聲明一個block Apush前進行block的實現block B中要賦值的時候進行調用block 這種block應為帶參數和傳回值的block
反向傳值 B->A 在B中聲明一個block Apush前實現block Bpop前調用block 這種block應為帶參數的block
單例傳值也分為正向傳值 和反向傳值
正向傳值就不說了 說白了就是一個中間者 A->B A->C C->A
反向傳值的話就是 B->A Bpop時把值賦值給單例 在介面消失時執行個體化A的對象 把單例的值賦給A (感覺多此一舉 還不如直接屬性賦值 但單例在資料共用時還是有用處的)
4、MVC、MVVM、MVP三大設計架構
MVC
缺陷:
實在是寫的太好了 就直接拿過來了
MVVM:
MVP:
5、單例(singleton)代理(delegate)觀察者(observer)動作/目標機制(target/action)等常見設計模式
單例:
代理:
觀察者:
動作/目標機制:
總結的好,希望能收穫一個贊 給點鼓勵
這是第一章總結的面試題就有一大堆東西了
接下來還有第二章 或者我的簡書地址去看看:http://www.jianshu.com/users/795c2ec428fd/latest_articles 也收藏了些乾貨。
謝謝大家的支援