完整写法
return_type (^block_name) (var_type)=^return_type(var_type) {...}
当等号右边的reture_type和var_type为void时可省略
比如:
void(^block_name) (var_type) = ^(var_type) {...}
return_type(^block_name)(void) = ^return_type {...}
void(^block_name)(void) = ^ {...}
匿名block:
等号右边的部分就是匿名block的格式
^return_type(var_type) {...}
block作为方法形参:
(return_type(^)(var_type))block_name
声明和赋值
void (^myblock) (NSString *str);
myblock = ^(NSString *str) {
NSLog(@"str = %@",str);
};
myblock(@"str1 = 1");
void (^myblock2) (NSString *str) = ^(NSString *str){
NSLog(@"str2 = %@",str);
};
myblock2(@"str2");
NSString * (^myblock3) (NSString *str) = ^(NSString *str) {
return str;
};
NSString *str1 = myblock3(@"haha");
NSLog(@"str3 = %@",str1);
2.block属性
typedef NSString * (^block1) (NSString *str);
@property (nonatomic,copy) block1 blk;
@property(nonatomic,copy)void(^block)(NSString *str);
3.block作为返回值
- (block1)testBlockReturn:(NSString *)str2
{
return ^NSString *(NSString *str) {
str = @"HAHAHAHAH";
return str;
};
}
4.block作为参数
- (void)functionBlock:(void(^)(NSString *str))block
{
block(@"haha");
}
- (void)callBlock
{
[self functionBlock:^(NSString *str) {
}];
}
- (void)functionBlock2:(NSString *(^)(NSString *str))block
{
NSString *str = block(@"hahaha");
NSLog(@"str = %@",str); //HAHAHAHAH
}
- (void)callBlock
{
[self functionBlock2:^NSString *(NSString *str) {
str = @"HAHAHAHAH";
return str;
}];
}