首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Objective-C Block(區塊)語法完整指南:宣告、定義、呼叫與 typedef

     編輯:關於C語言

Block 基本語法

Block 是 Objective-C 對閉包的實現,可捕獲外部變數,廣泛用於回呼、GCD、動畫等非同步場景。

1. 宣告與定義

// 宣告一個接受 int 回傳 int 的 Block 變數
int (^square_num)(int count);

// 定義:^ 後接參數列表,主體在 { }
square_num = ^(int count) {
    return count * count;
};

// 宣告並定義合寫
int (^square_num)(int count) = ^(int count) {
    return count * count;
};

2. 呼叫方式

int result = square_num(5);  // 像函式一樣呼叫,省略 ^
NSLog(@"%d", result);        // 輸出 25

3. 無參數、無回傳值 Block

void (^print_block)(void) = ^{
    printf("this is a block\n");
};
print_block();  // 呼叫

4. 使用 typedef 簡化複雜型別

typedef int (^SQUARE_NUM)(int count);

SQUARE_NUM s = ^(int count) {
    return count * count;
};
NSLog(@"%d", s(8));  // 輸出 64

Block 記憶體管理關鍵點

  • Block 預設在堆疊上建立,離開作用域即銷毀。
  • 需跨作用域使用時,必須 Block_copy()(或 [block copy])複製到堆積,用完 Block_release()。
  • ARC 環境下,將 Block 指派給強參考屬性或變數會自動複製。
  • 捕獲區域變數預設為 值捕獲(唯讀),需修改外部變數請加 __block 修飾。

常見應用場景

  1. GCD 非同步佇列:dispatch_async(queue, ^{ ... });
  2. UIView 動畫回呼:[UIView animateWithDuration:... animations:^{ ... } completion:^(BOOL finished){ ... }];
  3. 網路請求完成回呼、資料庫查詢回呼等。

本文轉載自 “JAVA積累” 博客,原文出處:https://linwb.blog.51cto.com/5577836/1288519

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved