iOS 面試之Block

轉自:http://blog.csdn.net/xunyn/article/details/11658261

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();});?

轉載于:https://www.cnblogs.com/fisland/p/4318127.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257581.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257581.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257581.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

當安全遇到大數據 “永恒之藍”也將無所遁形!

文章講的是當安全遇到大數據 “永恒之藍”也將無所遁形!5月12日,席卷全球的勒索病毒“永恒之藍”讓全世界都為之震動,這是迄今為止全球最大規模的勒索病毒網絡攻擊,100多個國家受到病毒感染,國內中石油、公安內網、高校…

[ES] 安裝

1.ElasticSearch安裝的準備工作 Linux:CentOS6.4 Elasticsearc:elasticsearch-2.2.0 JDK:jdk-7u79-linux-x64 IK:1.8.0 MAVEN:apache-maven-3.3.3-bin 2.配置網絡靜態文件 虛擬機設置橋接模式 配置:vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVIC…

語言基礎之description方法

1.description方法的一般用處 1: // 指針變量的地址 2: NSLog("%p", &p); 3: // 對象的地址 4: NSLog("%p", p); 5: // <類名&#xff1a;對象地址> 6: NSLog("%", p); 1: Class c [Person class]; 2: …

亞信安全協助綠谷制藥確保“秘方”安全

近幾年&#xff0c;我國醫藥生物技術發展態勢迅猛&#xff0c;加強知識產權保護己成為當務之急。為確保制藥配方數據和生產管理信息系統安全&#xff0c;上海綠谷制藥有限公司采用亞信安全服務器深度安全防護系統&#xff08;Deep Security&#xff09;和亞信安全防毒墻網絡版&…

mysql判斷疊字_格律詩的八大語法特點

古風的語法&#xff0c;本來就和散文的語法大致相同&#xff0c;直到近體詩&#xff0c;才漸和散文不同&#xff0c;原因是&#xff0c;首先在區區五字或七字之中&#xff0c;要施展豐富的想象&#xff0c;不能不力求簡潔&#xff0c;凡可省去而不至于影響語意的字&#xff0c;…

旅游行業春節檔期的大數據營銷

本文講的是旅游行業春節檔期的大數據營銷,雖然我國是以傳統農耕文化為主導的社會&#xff0c;每逢春節講究返鄉團聚。但現代化的城市文明更是對很多人的生活方式產生了影響&#xff0c;特別是生活在大城市中的年輕人&#xff0c;以及由年輕人構成的小家庭來說&#xff0c;春節的…

openwrt lamp

https://applefreak111.wordpress.com/2013/03/12/howtoopenwrt-lamp-stack%E5%AE%89%E8%A3%9D/opkg update安裝Lighttpd, MySQL 5, 和PHP 5。opkg install lighttpd lighttpd-mod-cgi lighttpd-mod-fastcgivi /etc/lighttpd/lighttpd.confcgi.assign ( “.php” > “/usr/…

MySQL本天早上8點到明早8點_似乎找到 OSChina 早上 8 點鐘容易宕機的原因

最近一段時間&#xff0c;OSChina 網站在早上 8 點出頭的時候很容易因為數據庫連接池爆滿而導致網站宕機。表現的情況是數據庫處理大量的查詢&#xff0c;堆積大量并發連接&#xff0c;導致無法再連接到數據庫&#xff0c;執行一個簡單的查詢速度也非常慢&#xff0c;數據庫機器…

基于Eclipse搭建STM32開源開發環境

最近項目不忙&#xff0c;想著沒事看看簡單的嵌入式&#xff0c;弄弄物聯網什么的。于是就從廉價的STM32開刀了。因為一直是做PC軟件開發的&#xff0c;那VS的智能感知那叫一個爽啊&#xff0c;相比之下&#xff0c;覺得這個Keil簡直就像文本編輯器一樣low。于是想換一個開發環…

數據中心不再有空調、風扇等冷卻裝置會怎樣?

數據中心的變革有望依賴移動設備實現&#xff0c;手機里輕便設備或將成為下一代數據中心的基礎設施&#xff0c;服務Google和Facebook等大型的應用程序服務企業。同時&#xff0c;這種商業模式也會構建新一代企業的發展形態&#xff0c;為初創企業帶來前所未有的機遇。 CSDN大數…

.NET 數據庫緩存依賴策略實現

處理大型門戶網站 一般都需要 使用緩存技術這個web加速器在 PHP 和 java 一般 使用的是 基于squid 來做. 當然在 windows .NET 平臺也是可以的 squid有 windows版本.這個以后再去研究,現在 就介紹一下 .NET 自帶的 緩存策略.Microsoft的petshop就用到了它;  一、基于數據庫觸…

大數據面臨的挑戰:當大數據遭遇云計算

本文講的是大數據面臨的挑戰&#xff1a;當大數據遭遇云計算,大數據正在徹底改變IT世界。那么&#xff0c;什么樣的數據談得上數據呢? 根據IDC的報告&#xff0c;未來十年全球大數據將增加50倍。僅在2011年&#xff0c;我們就將看到1.8ZB(也就是1.8萬億GB)的大數據創建產生。這…

Climbing Stairs - Print Path

stair climbing&#xff0c; print out all of possible solutions of the methods to climb a stars, you are allowed climb one or two steps for each time; what is time/space complexity? &#xff08;use recursion&#xff09; 這道題難是難在這個ArrayList<Strin…

java 單例設計_Java 之單例設計模式

設計模式: 對問題行之有效的解決方式, 其實它是一種思想.單例設計模式解決的問題:就是可以保證一個類在內存中的對象唯一性. 即單個實例.比如對于A 和 B 兩個程序使用同一個配置信息對象時, A 對配置信息作出修改, B 也與之對應的更新配置信息, 即需要保證該對象的唯一性.如何保…

Javascript之RegExp

RegExp對象的構造器 new RegExp(pattern[, flags]) pattern 正則表達式文本flags 該參數可以是下面幾個值的任意組合&#xff1a;g 全局匹配i 忽略大小寫m 讓開始和結束字符&#xff08;^ 和 $&#xff09;工作在多行模式&#xff08;也就是&#xff0c;^ 和 $ 可以匹配字符串中…

DS汽車通過采用沉浸式虛擬現實技術實現展廳轉型

PSA集團&#xff08;PSA Group&#xff09;旗下的高端品牌DS汽車公司&#xff08;DS Automobiles&#xff09;采用達索系統的“虛擬車庫&#xff08;Virtual Garage&#xff09;”行業解決方案為全新的SUV車型DS 7 CROSSBACK提供全面支持&#xff0c;推動其展廳轉型&#xff0c…

java 日歷記事本_calendar 一個用java編寫的日歷記事本. 具有正常日歷功能;也可以用于在不同日期記錄下當日重要的事情 - 下載 - 搜珍網...

日歷記事本/日歷記事本/build/classes/日歷記事本/CalendarPad$1.class日歷記事本/日歷記事本/build/classes/日歷記事本/CalendarPad.class日歷記事本/日歷記事本/build/classes/日歷記事本/Month.class日歷記事本/日歷記事本/build/classes/日歷記事本/NotePad.class日歷記事…

要的需求 ip提取網站源碼帶采集 要求是PHP源碼

求。ip提取網站源碼帶采集 要求是PHP源碼。必須帶采集類似 小峰IP提取網站&#xff0c;安小莫IP提取&#xff0c;迷惘IP提取&#xff0c;冰封IP提取免費類型的 不要淘寶類型的 200 轉載于:https://www.cnblogs.com/PS-apple/p/4342866.html

設計模式之PHP項目應用——單例模式設計Memcache和Redis操作類

1 單例模式簡單介紹 單例模式是一種經常使用的軟件設計模式。在它的核心結構中僅僅包括一個被稱為單例類的特殊類。通過單例模式能夠保證系統中一個類僅僅有一個實例并且該實例易于外界訪問。從而方便對實例個數的控制并節約系統資源。假設希望在系統中某個類的對象僅僅能存…

java 跳轉action_JS 跳轉到指定Action | 學步園

最近項目需要在JS中跳轉到指定的Action。通過不斷的實驗和查資料&#xff0c;終于成功。Java SSH2 架構下&#xff0c;正常 配置Action完畢。在xxx.jsp下window.location" ";例如&#xff1a;window.location" /user/ResAction> ";其中ResAction是配置文…