注:本文不涉及到底层实现和block原理。
先说下block长怎么样子吧“
**Block变量格式: 返回值类型(不可省略, 最少void) + (^变量名称) + (参数) (不可省略, 至少()). 格式和函数指针很相似,只是把*改成了^.
好了接下来按照下面一点一点来讲解
- block(作为参数)
- block(作为属性)
- block(作为返回值)
block作为参数:
1. //定义一个block(没有返回值 用void来表示,block名字为JFCallBack,以^还表示他是一个block,传一个参数为字符串)
typedef void (^JFCallBack) (NSString *name);
2./*声明一个类方法 ,参数为block*/
+(void)JFProductBlock:(JFCallBack)callBack;
3./*实现该带参数的block 并通过block参数进行回调的类方法*/
+(void)JFProductBlock:(JFCallBack)callBack{
/通过参数回调 传一个字符串参数/
callBack(@"JF");
}
4./*调用该带参数的block 的类方法*/
[ JFBlockASParameter JFProductBlock:^(NSString *name) {
NSLog(@"%@", name);
}];
在控制台里面打出来:
�block作为参数block作为属性:
1./*声明block属性*/
@property(nonatomic, copy)JFCallBack block;
2./*重写block属性的set方法*/
-(void)setBlock:(JFCallBack)block{
_block = block;
block(@"111");
}
3./*调用该block的属性*/
JFBlockASParameter *blockParmeter = [[JFBlockASParameter alloc]init];
blockParmeter.block = ^(NSString *str){
NSLog(@"%@", str);
};
控制台打出来:
block作为属性
block作为返回值:
1./**声明一个block方法返回值为block
+(JFCallBack )JFProductBlock;
2.实现返回值为block的方法
+(JFCallBack )JFProductBlock{
return ^(NSString *str){
NSLog(@"%@", str);
};
}
3./*调用返回值为block 的方法*/
作为返回值JFCallBack block = [JFBlockASParameter JFProductBlock];
/block回调进行传参/
block(@"JF 作为返回值");
}
网友评论