简介
闭包是一个函数(或指向函数的指针),再加上该函数执行的外部的上下文变量(有时也称作自由变量)。
block 实际上就是 Objective-C 语言对于闭包的实现。
block本质上也是一个OC对象,封装了函数调用以及函数调用环境,block内部也有个isa指针。
简单定义和使用
block定义的语法格式:
返回值类型 (^名字)(参数1, 参数2...) = ^{
}
- 无参无返回值
void (^MyBlockOne)(void) = ^{
NSLog(@"xxx");
};
MyBlockOne(); // 调用
- 无参有返回值
int (^MyBlockTwo)(void) = ^{
NSLog(@"xxx");
return 12;
};
int age = MyBlockTwo();
- 有参无返回值
void (^MyBlockThree)(int a) = ^(int a){
NSLog(@"a = %d", a);
};
MyBlockThree(10);
- 有参有返回值
int (^MyBlockFour)(int a) = ^(int a){
NSLog(@"有参有返回值 a = %d",a);
return a * 2;
};
int age = MyBlockFour(4);
自定义block类型
开发中,经常需要把block作为一个属性。就需要先自定义一个block类型。
利用关键字typedef
例如:定义一个有参有返回的block类型:
typedef int (^PDReturnBlock)(int a, int b);
typedef NSString* (^PDDblock)(int a) ;
- 开发中使用时
1.声明一个block类型的属性:
@property (nonatomic,copy)PDReturnBlock myBlock;
2.定义block类型的属性:
self.myBlock = ^int(int a, int b) {
return a + b;
};
self.ablock = ^NSString *(int a) {
return @"x";
};
3.调用block属性:
int a = self.myBlock(2, 5);
网友评论