1.什么是Block?
- Block是iOS中的數據類型(定義變量 、形參、返回值)。
- Block是蘋果官方推薦使用的數據類型。
- 動畫。
- 多線程。
- 集合遍歷。
- 網絡請求的回調。
- Block的作用
- 用來保存某一段代碼,可以在恰當的時間再取出來調用。
- 功能類似于函數和方法。
2.Block的格式
- Block的定義格式
返回值類型(^block變量名)(形參列表) = ^(形參列表){
};
- 指向函數的指針
void printRose()
{
printf(" {@}\n");
printf(" | \n");
printf(" \\|/\n");
printf(" |\n");
}
//void代表指向的函數沒有返回值
//()代表指向的函數沒有形參
//(* roseP)代表roseP是一個指向函數的指針
void (*roseP) ();
roseP = printRose;
roseP();
- 定義一個Block變量(和定義指向函數的指針很像)
//void代表Block將來保存的代碼沒有返回值
//()代表Block將來的保存的代碼沒有形參
//(^roseBlock)代表roseBlock是一個Block變量,可以用于保存一段Block代碼
void (^roseBlock) ();
roseBlock = ^{
printf(" {@}\n");
printf(" | \n");
printf(" \\|/\n");
printf(" |\n");
};
//調用Block才會執行Block保存的代碼
roseBlock();
- 帶參數的Block
void (^roseBlcok) (int);
roseBlcok = ^(int num){
for (int i; i < num; i++) {
printf(" {@}\n");
printf(" | \n");
printf(" \\|/\n");
printf(" |\n");
}
};
roseBlcok(2);
-
typedef 和 Block
//利用typedef給Block起別名,和函數的指針一樣,Block變量的名稱就是別名 typedef int (^caculte) (int,int); //實現 caculte sum = ^(int value1, int value2){ return value1 + value2; }; NSLog(@"sum = %i",sum(5,7)); caculte minus = ^(int value1, int value2){ return value1 - value2; }; NSLog(@"sum = %i",minus(5,7));