1. 什么是block袭异?
block跟swift中的閉包(closure)基本一樣,都常用于值的回調(diào)稠鼻,特別是在多線程的網(wǎng)絡(luò)請求回調(diào)中捺信,使用起來極為方便刃滓。其中閉包就是能夠讀取其它函數(shù)內(nèi)部變量的函數(shù)仁烹。
block的開頭是“^”,接著是由小括號所報起來的參數(shù)列注盈,行為主體由大括號包起來晃危。block有四種類型叙赚,分別是無參無返回老客、無參有返回僚饭、有參有返回、以及有參無返回胧砰,而一般使用的block都是有參block鳍鸵,因為使用block主要就是進行參數(shù)的傳遞。
block是一個特殊的OC對象, 它建立在棧上, 而不是堆上, 這么做一個是為性能考慮,還有就是方便訪問局部變量.
默認情況下block使用到的局部變量都會被復(fù)制,而不是保留.所以它無法改變局部變量的值.如果要在block中修改外部變量尉间,當變量是static全局變量時偿乖,block可以直接修飾,如果不是哲嘲,可以用__block關(guān)鍵字來修飾贪薪,就可以在block內(nèi)修改變量的值。
2. block 實現(xiàn)原理
Objective-C是對C語言的擴展眠副,block的實現(xiàn)是基于指針和函數(shù)指針画切。
從計算語言的發(fā)展,最早的goto囱怕,高級語言的指針霍弹,到面向?qū)ο笳Z言的block,從機器的思維娃弓,一步步接近人的思維典格,以方便開發(fā)人員更為高效、直接的描述出現(xiàn)實的邏輯(需求)台丛。
多線程與block
GCD與Block
使用 dispatch_async 系列方法耍缴,可以以指定的方式執(zhí)行block
作為一個開發(fā)者,有一個學習的氛圍跟一個交流圈子特別重要挽霉,這是一個我的iOS交流群:711315161私恬,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題炼吴、面試經(jīng)驗本鸣,討論技術(shù), 大家一起交流學習成長硅蹦!