塊與GCD

沒讀這本書之前,我對(duì) block理解的成長(zhǎng)過程;

block編程對(duì)于許多初識(shí)iOS編程的人來說,很難理解和運(yùn)用,我接觸到的一個(gè)做了java好多年的程序員在剛接觸oc時(shí),block確實(shí)讓他暈了一把;
1. 新手如何面對(duì)block?
首先從宏觀角度理解block,和int作比較,就把block看做一種數(shù)據(jù)類型,只不過它是種高端的數(shù)據(jù)類型;

int main(int argc, const char * argv[]) {
    // 沒用的int型數(shù)字100
    100;
    
    ^{
        NSLog(@"我是最簡(jiǎn)單最沒用block,但是可以幫助你理解block");
    };
    
    return 0;
}  

這樣寫,不會(huì)報(bào)錯(cuò),但是都沒用,100沒有被記錄,同樣block也沒有被記錄;log打印也不會(huì)執(zhí)行;

如果你想用一個(gè)變量記錄一下100這個(gè)數(shù)字,你可能會(huì)這么寫:

int a = 100;  

如果你想記錄一些操作即block(這里需要你要把這個(gè)操作看做一個(gè)整體,或者具備某些功能的一條或多條語句),同樣像變量a一樣,不同的是block的類型稍微復(fù)雜一點(diǎn);

// void (^)()  就是block的類型  firstBlock就是變量名
void (^firstBlock)()   = ^(){
        NSLog(@"我是個(gè)block");
 };  
// 

從block的定義可以作出進(jìn)一步理解,block是一個(gè)特殊的函數(shù),有時(shí)候我們要記錄一些代碼,在必要的時(shí)候執(zhí)行,這個(gè)時(shí)候可以使用block;

函數(shù)是c語言中的稱謂,oc中叫做方法;

既然類似函數(shù),想讓上邊的打印執(zhí)行,就像函數(shù)一樣調(diào)用吧;

firstBlock(); // 打?。何沂莻€(gè)block
// 當(dāng)block沒有參數(shù)的時(shí)候 `=`后邊的block實(shí)現(xiàn)部分的`()`可以不寫
void (^firstBlock)()  = ^{
        NSLog(@"我是個(gè)block");
 };  
// 既然是類似函數(shù),void意思是block沒有返回值;下面寫個(gè)有返回值的block  
int (^sumBlock)(int a, int b) = ^(int a, int b){ // 有參數(shù)的時(shí)候不能省略括號(hào)了,不然在block內(nèi)部沒法使用參數(shù)了
        return a + b;
    };
    
    // 這個(gè)block的功能是計(jì)算兩個(gè)整數(shù)的和
    int sum = sumBlock(2, 3);

就這樣,block大概不陌生了,也沒什么大不了的,就是包裝了某個(gè)功能的特殊函數(shù);
那么問題來了,為什么不直接使用函數(shù),而要使用block,還搞的這么復(fù)雜;存在即合理,block肯定有它特殊的用處;
如果仔細(xì)guan觀察,會(huì)發(fā)現(xiàn)block都寫在了其他函數(shù)中,就像第一個(gè)最簡(jiǎn)單的firstBlock就寫在main函數(shù)中,沒錯(cuò)block比函數(shù)牛逼的地方是,它可以寫在其他函數(shù)中,不僅如此,你還可以把block當(dāng)做參數(shù)在不同的函數(shù)直接傳遞;

  • block寫在其他函數(shù)中,可以和定義它的函數(shù)共享一個(gè)范圍內(nèi)的東西,也就是值捕獲;
  • block作為函數(shù)參數(shù)傳遞,穿梭在各個(gè)方法之間,代碼就不會(huì)松散;還有就是可以實(shí)現(xiàn)回調(diào),回調(diào)也可以用代理來實(shí)現(xiàn);
    ...未完待續(xù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容