Block

黃上銘發表於2019-06-23

本質

是將函式及其執行上下文封裝起來的物件。

 int multiplier = 6;
 int(^Block)(int) = ^(int)(int num) {
      // 函式呼叫是使用結構體對應的 multiplier,而不是方法宣告的 multiplier
      return num * multiplier;
 };

什麼是 Block 呼叫?

答:Block 呼叫即是函式的呼叫

截獲變數

// 基本資料型別的區域性變數,在定義時就以值的方式傳遞到 Block 對應的結構體中
int multiplier = 6;
int(^Block)(int) = ^(int)(int num) {
    // 函式呼叫是使用結構體對應的 multiplier,而不是方法宣告的 multiplier
    return num * multiplier;
};
multiplier = 4;
// result is 12
NSLog(@"result is %d", Blcok(2));
  1. 對於基本資料型別的區域性變數截獲其值
  2. 對於物件型別的區域性變數連同所有權修飾符一起截獲
  3. 以指標形式截獲靜態區域性變數
  4. 不截獲全域性變數、靜態全域性變數

欲戴王冠,必承其重。

相關文章