1.什么是Block?
- Block是iOS中的數(shù)據(jù)類型(定義變量 、形參、返回值)。
- Block是蘋果官方推薦使用的數(shù)據(jù)類型。
- 動畫。
- 多線程。
- 集合遍歷。
- 網(wǎng)絡(luò)請求的回調(diào)。
- Block的作用
- 用來保存某一段代碼,可以在恰當(dāng)?shù)臅r間再取出來調(diào)用。
- 功能類似于函數(shù)和方法。
2.Block的格式
- Block的定義格式
返回值類型(^block變量名)(形參列表) = ^(形參列表){
};
- 指向函數(shù)的指針
void printRose()
{
printf(" {@}\n");
printf(" | \n");
printf(" \\|/\n");
printf(" |\n");
}
//void代表指向的函數(shù)沒有返回值
//()代表指向的函數(shù)沒有形參
//(* roseP)代表roseP是一個指向函數(shù)的指針
void (*roseP) ();
roseP = printRose;
roseP();
- 定義一個Block變量(和定義指向函數(shù)的指針很像)
//void代表Block將來保存的代碼沒有返回值
//()代表Block將來的保存的代碼沒有形參
//(^roseBlock)代表roseBlock是一個Block變量,可以用于保存一段Block代碼
void (^roseBlock) ();
roseBlock = ^{
printf(" {@}\n");
printf(" | \n");
printf(" \\|/\n");
printf(" |\n");
};
//調(diào)用Block才會執(zhí)行Block保存的代碼
roseBlock();
- 帶參數(shù)的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起別名,和函數(shù)的指針一樣,Block變量的名稱就是別名 typedef int (^caculte) (int,int); //實現(xiàn) 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));