這是我個(gè)人總結(jié)的一些知識(shí)點(diǎn) ?如果總結(jié)的不全面 或是其中有問題 ? ?歡迎大家給我留言 ?我會(huì)改過來的 ?另外這些也在我的博客里面可以找到
附上我的博客地址:www.cnblogs.com/PengHongMiao/
1、APP的生命周期和viewcontroler的生命周期?
答:APP的生命周期:在APP的代理中分為七個(gè)階段:
1.將要啟動(dòng)
2.已經(jīng)啟動(dòng)
3.將要進(jìn)入非活動(dòng)狀態(tài)
4.進(jìn)入后臺(tái)
5.從后臺(tái)進(jìn)入前臺(tái)
6.進(jìn)入活動(dòng)狀態(tài)
7.內(nèi)存告警
viewcontroller的生命周期:(也是七個(gè))
loadView->viewDidLoad->viewWillAppear->viewDidAppear->viewWillDisAppear->viewDidDisAppear->delloc
2、多線程:NSThread、NSOperation、GCD
NSOperation 是個(gè)抽象類,并不具備封裝操作的能力,必須使?它的子類:
NSInvocationOperation (使用代理)
NSBlockOperation ?(使用block)
GCD---
Grand Central Dispatch(GCD) 是Apple開發(fā)的一個(gè)多核編程的較新的解決方法
GCD可用于多核的并行運(yùn)算
GCD會(huì)自動(dòng)利用更多的CPU內(nèi)核(比如雙核、四核)
GCD會(huì)自動(dòng)管理線程的生命周期(創(chuàng)建線程、調(diào)度任務(wù)、銷毀線程
程序員只需要告訴GCD想要執(zhí)行什么任務(wù),不需要編寫任何線程管理代碼
學(xué)習(xí)GCD之前,先來了解GCD中兩個(gè)核心概念:任務(wù)和隊(duì)列
任務(wù):就是執(zhí)行操作的意思,換句話說就是你在線程中執(zhí)行的那段代碼。在GCD中是放在block中的。執(zhí)行任務(wù)有兩種方式:同步執(zhí)行和異步執(zhí)行。兩者的主要區(qū)別是:是否具備開啟新線程的能力。
同步執(zhí)行(sync):只能在當(dāng)前線程中執(zhí)行任務(wù),不具備開啟新線程的能力
異步執(zhí)行(async):可以在新的線程中執(zhí)行任務(wù),具備開啟新線程的能力
隊(duì)列:這里的隊(duì)列指任務(wù)隊(duì)列,即用來存放任務(wù)的隊(duì)列。隊(duì)列是一種特殊的線性表,采用FIFO(先進(jìn)先出)的原則,即新任務(wù)總是被插入到隊(duì)列的末尾,而讀取任務(wù)的時(shí)候總是從隊(duì)列的頭部開始讀取。每讀取一個(gè)任務(wù),則從隊(duì)列中釋放一個(gè)任務(wù)。在GCD中有兩種隊(duì)列:串行隊(duì)列和并發(fā)隊(duì)列。
想要更詳細(xì)的了解GCD去看:http://www.lxweimin.com/p/2d57c72016c6
3、單例、代理、屬性、通知、block的傳值技術(shù)?
屬性傳值很好理解。A->B ?就在B的.h中暴露出一個(gè)屬性就可以了,在A中直接調(diào)用B的實(shí)例進(jìn)行賦值就可以了。 ? 也是最簡(jiǎn)單的傳值方法
代理傳值 ?A->B ?在A中聲明協(xié)議 在B中遵循協(xié)議 ?并實(shí)現(xiàn)協(xié)議方法就可以了 ? ? ? ?也比較簡(jiǎn)單
B->A 即反向傳值 ? ?在B中聲明協(xié)議 A中遵循協(xié)議----- 在A中push到B時(shí)遵循協(xié)議,設(shè)置代理 ?并實(shí)現(xiàn)代理方法 ? 在B中pop回A時(shí)利用自己的代理執(zhí)行代理方法(即把B中的值賦給代理方法中的參數(shù)即可) ?是不是很簡(jiǎn)單
只要記住 ? 代理反向傳值 ? 誰傳誰聲明協(xié)議 ? 接收方實(shí)現(xiàn)代理方法 ? push前遵循協(xié)議設(shè)置代理 ? pop前執(zhí)行代理方法(賦值)
block 傳值分為正向傳值和反向傳值
正向傳值 ?A->B ?在A中聲明一個(gè)block ? ?Apush前進(jìn)行block的實(shí)現(xiàn)block ? ?B中要賦值的時(shí)候進(jìn)行調(diào)用block ? ? ?這種block應(yīng)為帶參數(shù)和返回值的block
反向傳值 B->A 在B中聲明一個(gè)block Apush前實(shí)現(xiàn)block ? Bpop前調(diào)用block 這種block應(yīng)為帶參數(shù)的block
單例傳值也分為正向傳值 和反向傳值
正向傳值就不說了 ? ? 說白了就是一個(gè)中間者 ?A->B ? ? A->C ? C->A
反向傳值的話就是 ? ?B->A Bpop時(shí)把值賦值給單例 ? ?在界面消失時(shí)實(shí)例化A的對(duì)象 把單例的值賦給A ? ? ?(感覺多此一舉 ?還不如直接屬性賦值 ? 但單例在數(shù)據(jù)共享時(shí)還是有用處的)
4、MVC、MVVM、MVP三大設(shè)計(jì)框架
MVC
缺陷:
實(shí)在是寫的太好了 ?就直接拿過來了
MVVM:

MVP:
5、單例(singleton)代理(delegate)觀察者(observer)動(dòng)作/目標(biāo)機(jī)制(target/action)等常見設(shè)計(jì)模式
單例:
代理:
觀察者:

動(dòng)作/目標(biāo)機(jī)制:
總結(jié)的好,希望能收獲一個(gè)贊 ?給點(diǎn)鼓勵(lì)
這是第一章總結(jié)的面試題就有一大堆東西了
接下來還有第二章 ?或者我的簡(jiǎn)書地址去看看:http://www.lxweimin.com/users/795c2ec428fd/latest_articles ? 也收藏了些干貨。
謝謝大家的支持