iOS 面试之Block
生活随笔
收集整理的這篇文章主要介紹了
iOS 面试之Block
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
轉(zhuǎn)自:http://blog.csdn.net/xunyn/article/details/11658261
1 什么是block
對于閉包(block),有很多定義,其中閉包就是能夠讀取其它函數(shù)內(nèi)部變量的函數(shù),這個(gè)定義即接近本質(zhì)又較好理解。對于剛接觸Block的同學(xué),會覺得有些繞,因?yàn)槲覀兞?xí)慣寫這樣的程序main(){ funA();} funA(){funB();} funB(){.....}; 就是函數(shù)main調(diào)用函數(shù)A,函數(shù)A調(diào)用函數(shù)B... 函數(shù)們依次順序執(zhí)行,但現(xiàn)實(shí)中不全是這樣的,例如項(xiàng)目經(jīng)理M,手下有3個(gè)程序員A、B、C,當(dāng)他給程序員A安排實(shí)現(xiàn)功能F1時(shí),他并不等著A完成之后,再去安排B去實(shí)現(xiàn)F2,而是安排給A功能F1,B功能F2,C功能F3,然后可能去寫技術(shù)文檔,而當(dāng)A遇到問題時(shí),他會來找項(xiàng)目經(jīng)理M,當(dāng)B做完時(shí),會通知M,這就是一個(gè)異步執(zhí)行的例子。在這種情形下,Block便可大顯身手,因?yàn)樵陧?xiàng)目經(jīng)理M,給A安排工作時(shí),同時(shí)會告訴A若果遇到困難,如何能找到他報(bào)告問題(例如打他手機(jī)號),這就是項(xiàng)目經(jīng)理M給A的一個(gè)回調(diào)接口,要回掉的操作,比如接到電話,百度查詢后,返回網(wǎng)頁內(nèi)容給A,這就是一個(gè)Block,在M交待工作時(shí),已經(jīng)定義好,并且取得了F1的任務(wù)號(局部變量),卻是在當(dāng)A遇到問題時(shí),才調(diào)用執(zhí)行,跨函數(shù)在項(xiàng)目經(jīng)理M查詢百度,獲得結(jié)果后回調(diào)該block。 2 block 實(shí)現(xiàn)原理 Objective-C是對C語言的擴(kuò)展,block的實(shí)現(xiàn)是基于指針和函數(shù)指針。 從計(jì)算語言的發(fā)展,最早的goto,高級語言的指針,到面向?qū)ο笳Z言的block,從機(jī)器的思維,一步步接近人的思維,以方便開發(fā)人員更為高效、直接的描述出現(xiàn)實(shí)的邏輯(需求)。 下面是兩篇很好的介紹block實(shí)現(xiàn)的博文 iOS中block實(shí)現(xiàn)的探究 談Objective-C Block的實(shí)現(xiàn) 3 block的使用 使用實(shí)例 cocoaTouch框架下動畫效果的Block的調(diào)用 使用typed聲明block typedef void(^didFinishBlock) (NSObject *ob); 這就聲明了一個(gè)didFinishBlock類型的block, 然后便可用 @property (nonatomic,copy) didFinishBlock? finishBlock; 聲明一個(gè)blokc對象,注意對象屬性設(shè)置為copy,接到block 參數(shù)時(shí),便會自動復(fù)制一份。 __block是一種特殊類型, 使用該關(guān)鍵字聲明的局部變量,可以被block所改變,并且其在原函數(shù)中的值會被改變。 4 常見系列面試題 面試時(shí),面試官會先問一些,是否了解block,是否使用過block,這些問題相當(dāng)于開場白,往往是下面一系列問題的開始,所以一定要如實(shí)根據(jù)自己的情況回答。 1 使用block和使用delegate完成委托模式有什么優(yōu)點(diǎn)? 首先要了解什么是委托模式,委托模式在iOS中大量應(yīng)用,其在設(shè)計(jì)模式中是適配器模式中的對象適配器,Objective-C中使用id類型指向一切對象,使委托模式更為簡潔。了解委托模式的細(xì)節(jié): iOS設(shè)計(jì)模式----委托模式? 使用block實(shí)現(xiàn)委托模式,其優(yōu)點(diǎn)是回調(diào)的block代碼塊定義在委托對象函數(shù)內(nèi)部,使代碼更為緊湊; 適配對象不再需要實(shí)現(xiàn)具體某個(gè)protocol,代碼更為簡潔。 2 多線程與block GCD與Block 使用 dispatch_async?系列方法,可以以指定的方式執(zhí)行block GCD編程實(shí)例 dispatch_async的完整定義 void dispatch_async( dispatch_queue_t queue, dispatch_block_t block); 功能:在指定的隊(duì)列里提交一個(gè)異步執(zhí)行的block,不阻塞當(dāng)前線程 通過queue來控制block執(zhí)行的線程。主線程執(zhí)行前文定義的 finishBlock對象 dispatch_async(dispatch_get_main_queue(),^(void){finishBlock();});?轉(zhuǎn)載于:https://www.cnblogs.com/fisland/p/4318127.html
總結(jié)
以上是生活随笔為你收集整理的iOS 面试之Block的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛腩新闻发布系统(一):SQLHelpe
- 下一篇: 用户画像(3)用户画像的建模方法-事实标