你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS進階面試題----Block部分

iOS進階面試題----Block部分

編輯:IOS開發綜合
1 什麼是block   對於閉包(block),有很多定義,其中閉包就是能夠讀取其它函數內部變量的函數,這個定義即接近本質又較好理解。對於剛接觸Block的同學,會覺得有些繞,因為我們習慣寫這樣的程序main(){ funA();} funA(){funB();} funB(){.....}; 就是函數main調用函數A,函數A調用函數B... 函數們依次順序執行,但現實中不全是這樣的,例如項目經理M,手下有3個程序員A、B、C,當他給程序員A安排實現功能F1時,他並不等著A完成之後,再去安排B去實現F2,而是安排給A功能F1,B功能F2,C功能F3,然後可能去寫技術文檔,而當A遇到問題時,他會來找項目經理M,當B做完時,會通知M,這就是一個異步執行的例子。在這種情形下,Block便可大顯身手,因為在項目經理M,給A安排工作時,同時會告訴A若果遇到困難,如何能找到他報告問題(例如打他手機號),這就是項目經理M給A的一個回調接口,要回掉的操作,比如接到電話,百度查詢後,返回網頁內容給A,這就是一個Block,在M交待工作時,已經定義好,並且取得了F1的任務號(局部變量),卻是在當A遇到問題時,才調用執行,跨函數在項目經理M查詢百度,獲得結果後回調該block。   2 block 實現原理 Objective-C是對C語言的擴展,block的實現是基於指針和函數指針。 從計算語言的發展,最早的goto,高級語言的指針,到面向對象語言的block,從機器的思維,一步步接近人的思維,以方便開發人員更為高效、直接的描述出現實的邏輯(需求)。 下面是兩篇很好的介紹block實現的博文 iOS中block實現的探究 談Objective-C Block的實現     3 block的使用 使用實例 cocoaTouch框架下動畫效果的Block的調用   使用typed聲明block typedef void(^didFinishBlock) (NSObject *ob); 這就聲明了一個didFinishBlock類型的block, 然後便可用 @property (nonatomic,copy) didFinishBlock  finishBlock; 聲明一個blokc對象,注意對象屬性設置為copy,接到block 參數時,便會自動復制一份。   __block是一種特殊類型, 使用該關鍵字聲明的局部變量,可以被block所改變,並且其在原函數中的值會被改變。     4 常見系列面試題 面試時,面試官會先問一些,是否了解block,是否使用過block,這些問題相當於開場白,往往是下面一系列問題的開始,所以一定要如實根據自己的情況回答。 1 使用block和使用delegate完成委托模式有什麼優點? 首先要了解什麼是委托模式,委托模式在iOS中大量應用,其在設計模式中是適配器模式中的對象適配器,Objective-C中使用id類型指向一切對象,使委托模式更為簡潔。了解委托模式的細節:  iOS設計模式----委托模式  使用block實現委托模式,其優點是回調的block代碼塊定義在委托對象函數內部,使代碼更為緊湊; 適配對象不再需要實現具體某個protocol,代碼更為簡潔。     2 多線程與block GCD與Block 使用 dispatch_async 系列方法,可以以指定的方式執行block GCD編程實例   dispatch_async的完整定義    void dispatch_async(    dispatch_queue_t queue,    dispatch_block_t block); 功能:在指定的隊列裡提交一個異步執行的block,不阻塞當前線程   通過queue來控制block執行的線程。主線程執行前文定義的 finishBlock對象 dispatch_async(dispatch_get_main_queue(),^(void){finishBlock();});   
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved