bock常用写法:
1、无返回值 & 无参数
//定义blcok变量 无返回值
typedef void(^BlockA)(void);
//赋值
BlockA blockA = ^{
NSLog(@"this is blockA");
};
//调用
blockA();
2、有返回值 & 无参数
//定义blcok变量 返回值为int类型,无参数
typedef int(^BlockB)(void);
//赋值
BlockB blockB = ^int {
int count = 2;
NSLog(@"this is blockB [%d]", count);
return count;
};
//调用
blockB();
3、有返回值 & 有参数
//定义blcok变量 返回值为int类型, 参数为int类型
typedef int(^BlockC)(int);
//赋值
BlockC blockC = ^int (int count){
NSLog(@"this is blockC [%d]", count);
return count;
};
//调用
blockC(4);
4、
typedef void(^BlockD)(void);
typedef void(^BlockE)(int, NSString*);
- (void)testBlock:(BlockD)blockD blockE:(BlockE)blockE {
blockD();
blockE(2, @"abc");
}
[self testBlock:^{
NSLog(@"---blockD-----");
} blockE:^(int count, NSString *string) {
NSLog(@"blockE count is [%d],string is [%@]", count, string);
}];
block注意事项:
1、
变量访问,使用__block修饰符,可以对变量读写,否则只读。
2、
注意循环引用,使用__weak修饰符:
__weak __typeof(self)weakSelf = self;
blockF = ^{
__strong __typeof(weakSelf)strongSelf = weakSelf;
NSLog(@"self is [%@]", strongSelf);
};
blockF();