Block的使用

block是封裝了函數(shù)執(zhí)行上下文環(huán)境的對(duì)象

block聲明及使用語法

block本質(zhì)是一個(gè)對(duì)象,那么我們肯定可以聲明block類型

typedef 返回類型(^Block類型名稱)(參數(shù)類型列表...);

//舉例
typedef int(^BlockType)(int, int);

//聲明一個(gè)block變量
BlockType block1;

直接聲明一個(gè)block變量(不通過類型)

返回值類型 (^blockName)(參數(shù)類型列表...);

//舉例
int (^block3)(int, int);

定義block的實(shí)現(xiàn)

^ 返回值 (參數(shù)列表...){
  //block內(nèi)部功能實(shí)現(xiàn)
};

其中,返回值可以省略,如果參數(shù)列表為空,那么參數(shù)列表也可以省略。

^ (參數(shù)列表){
  //block內(nèi)部功能實(shí)現(xiàn)
};

^ {
  //block內(nèi)部功能實(shí)現(xiàn)
};

#pragma makr - 簡(jiǎn)寫
//完整寫法
^int (int a, int b) {
  if ( a >= b ) {
    return a;
  } else {
    return b;
  }
};

// 省略返回值 
^(int a, int b) {
  if ( a >= b ) {
    return a;
  } else {
    return b;
  }
};

// 省略返回值及參數(shù)        
^ {
  NSLog(@"block");
};

block作為參數(shù)類型

- (void)paramBlock:(int (^)(int, int))block {
    if (block) {
        block(4, 6);
    }
}

block作為函數(shù)返回值

- (int(^)(int, int))returnBlock {
    int (^maxBlock) (int , int) = ^(int a, int b) {
        if ( a >= b ) {
            return a;
        } else {
            return b;
        }
    };
    
    return maxBlock;
}

如何理解并記憶block類型及block實(shí)現(xiàn)的語法呢?

block的定義,采用的是返回值 (^)(參數(shù)類型列表...)的樣式,這個(gè)是不是和函數(shù)指針(返回值 (*函數(shù)指針)(參數(shù)列表類型...))的定義超級(jí)像呢?
block的實(shí)現(xiàn),采用的是^ 返回值 (參數(shù)類型列表){ }的樣式。

最后編輯于
?著作權(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)容