Block 是 Objective-C 對閉包的實現,可捕獲外部變數,廣泛用於回呼、GCD、動畫等非同步場景。
// 宣告一個接受 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;
};
int result = square_num(5); // 像函式一樣呼叫,省略 ^ NSLog(@"%d", result); // 輸出 25
void (^print_block)(void) = ^{
printf("this is a block\n");
};
print_block(); // 呼叫
typedef int (^SQUARE_NUM)(int count);
SQUARE_NUM s = ^(int count) {
return count * count;
};
NSLog(@"%d", s(8)); // 輸出 64
Block_copy()(或 [block copy])複製到堆積,用完 Block_release()。__block 修飾。dispatch_async(queue, ^{ ... });[UIView animateWithDuration:... animations:^{ ... } completion:^(BOOL finished){ ... }];本文轉載自 “JAVA積累” 博客,原文出處:https://linwb.blog.51cto.com/5577836/1288519