iOS block介紹
block因其古怪的語法結(jié)構(gòu)所以看上去比較蛋疼,比較難記,還好工作中忘記怎么寫了是有技巧的等下會說,block的所用就是幫你保存一份代碼然后再恰當(dāng)?shù)臅r候調(diào)用,返回你所需要的“值”(沒想到詞,就用它吧,對block做了以下總結(jié),做下筆記
如何聲明及實現(xiàn)一個block 看圖

忘記寫法可以試試.png
定義無返回值 無參數(shù)的block
// 無返回值 無參數(shù)
void(^block01)() = ^(){
NSLog(@"01-無返回值 無參數(shù)的block");
};
block01();
定義無返回值 有參數(shù)的block
// 無返回值 有參數(shù)(int 類型)
void(^block02)(int) = ^(int age){
NSLog(@"%d",age);
};
// 傳入一個參數(shù)
block02(20);
定義有返回值有參數(shù)的block
// 有返回值 有參數(shù)
int(^block03)(int) = ^(int num){
NSLog(@"03-有返回值 有參數(shù)的block num:%d",num);
return 100;
};
int temp = block03(200);
NSLog(@"03-有返回值 有參數(shù)的block temp:%d",temp);
打印結(jié)果都在這里了

打印結(jié)果.png
好 開始介紹第一種block 把一段block代碼當(dāng)做**對象的屬性值 以Person類為例
以operAtion(操作)為屬性
定義屬性

Paste_Image.png
// 開發(fā)中第一種使用場景 將block保存到對象中
self.p.operAtion = ^(){
NSLog(@"02-將block當(dāng)做屬性值保存起來");
};
// 第二種寫法
void(^block03)() =^(){
NSLog(@"03-將block當(dāng)做屬性值保存起來");
};
self.p.operAtion = block03;
在你認為合適的時刻調(diào)用這個屬性 也就是封裝的這段block代碼

Paste_Image.png
第二種block 把block當(dāng)做方法的參數(shù) 也是最常用的寫法
定義一個帶有block的函數(shù)

Paste_Image.png
實現(xiàn)這個函數(shù)
/**
* 實現(xiàn)方法
*
* @param block 在方法內(nèi)部調(diào)用block
*/
-(void)eat:(void (^)(int))block{
NSLog(@"此處可封裝N多代碼 返回值可通過block的參數(shù)回調(diào)到外界 此處以 int 為例");
block(5);
}
外界調(diào)用這個方法
// 開發(fā)中第二種使用場景 將block作為方法的參數(shù) 在方法內(nèi)部調(diào)用這個block
Person *p = [[Person alloc]init];
[p eat:^(int count){
NSLog(@"吃了%d個饅頭",count);
}];

Paste_Image.png
第三種block 把block當(dāng)做方法的返回值 符合鏈式編程思想
定義這個方法

Paste_Image.png
實現(xiàn)這個方法

Paste_Image.png
外界調(diào)用

Paste_Image.png
打印結(jié)果

Paste_Image.png