什么是Block?
Block是一种特殊的数据类型,就是一个代码块,可以用于回调。
Block定义格式
返回值类型(^block变量名)(形参列表) = ^(形参列表){
}
调用
block变量名(实参列表);
如
void(^myBlock)(void) = ^(){
NSLog(@"我是一个block");
};
myBlock();
Block的模式
- 无参数无返回值的Block
- 无参数有返回值的Block
- 有参数无返回值的Block
- 有参数有返回值的Block
Block使用注意点
虽然说ARC是自动管理内存,但是如果我们使用Block不正确,会引起循环引用导致内存泄露,因此得结合下面一个小点 Block的修饰
Block的修饰
此处的详细内容见__weak和__block的区别
Block的使用范例
- 无参数无返回值的Block
/**
1. 无参数无返回值
*/
2. (void)funcOne {
void(^emptyBlock)() = ^{
NSLog(@"无参数无返回值block");
};
emptyBlock();
}
- 无参数有返回值的Block
/**
* 无参数有返回值
*/
- (void)funcTwo {
int(^myBlock)() = ^{
return 2;
};
NSLog(@"%d",myBlock());
}
- 有参数无返回值的Block
/**
* 有参数无返回值
*/
- (void)funcThree {
void(^myBlock)(int,int) = ^(int a,int b){
NSLog(@"%d+%d=%d",a,b,a+b);
};
myBlock(3,4);
}
- 有参数有返回值的Block
/**
* 有参数有返回值
*/
- (void)funcFour {
NSString *(^myBlock)(int,int) = ^(int a,int b){
return [NSString stringWithFormat:@"hello,%d and %d",a,b];
};
NSLog(@"%@",myBlock(3,4));
}
本文没有对Block做过多的现实研究,只是讲解基本的用法。纯粹基础知识。结合实际项目怎么去做举例。Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等。用过GCD就知道Block的精妙之处。Block作为参数传递的情况没有写了,如果有补充或者有疑问的,欢迎讨论!
3258

被折叠的 条评论
为什么被折叠?



