block 是蘋果官方特別推薦使用的數(shù)據(jù)類型,應(yīng)用場(chǎng)景比較廣泛
動(dòng)畫
[UIView animateWithDuration:.3 animations:^{
}];
多線程
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_async(mainQueue, ^{
});
集合便利
NSArray *arr = @[@"中國(guó)",@"德國(guó)",@"日本",@"美國(guó)"];
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
}];
網(wǎng)絡(luò)請(qǐng)求回調(diào)
NSDictionary *params;
[[NetworkRequest sharedInstance] postRequestWithUrl:@"https://baidu.com" action:@"abc" params:params completionHandler:^(id _Nullable responseData) {
} errorHandler:^(NSError * _Nullable error) {
}];
block 用法
1.用來保存某一段代碼,可以在恰當(dāng)?shù)臅r(shí)機(jī)再取出來調(diào)用.
2.功能有點(diǎn)類似于函數(shù)和方法
3.調(diào)用空的block時(shí) ,報(bào)錯(cuò)exc_bad_access,所有每次調(diào)用block的時(shí)候必須要,先檢查
if(work ?。?nil){
work();
}
4.默認(rèn)情況下,block不能修改外面的局部變量,要在變量前添加雙下劃線,才能改變
__block int b = 10;
void (^block)() = ^{
b = 20;
NSLog(@“b is %d”,b);
};
block();
5.block其實(shí)也是一種數(shù)據(jù)類型,跟NSString,int之類的類似,定義block變量,給block賦值。
void(^myblock)();//定義一個(gè)變量名為myblock的block
myblock = ^{
NSLog(@"hahahahshfAAAA");
};//給myblock賦值
myblock();//調(diào)用這個(gè)block。這里的用法又有點(diǎn)類似函數(shù)。