1、作為變數 //block 的申明,定義,調用,block快捷方式inline //<#returnType#>(^<#blockName#>)(<#parameterTypes#>) = ^(<#parameters#>) { // <#statements#> //}; // blockNam ...
1、作為變數
//block 的申明,定義,調用,block快捷方式inline
//<#returnType#>(^<#blockName#>)(<#parameterTypes#>) = ^(<#parameters#>) {
// <#statements#>
//};
// blockName(parameters);
//frist method
void(^block1)() = ^{
NSLog(@"調用了block1");
};
block1();
//second method ,如果沒有參數,參數可以隱藏,如果有參數,定義的時候,必須要寫參數,而且必須要有參數變數名
void(^block2)(int) = ^(int a){
};
block2(2);
//third method ,block式右邊定義返回類型可以省略,不管有沒有返回值,都可以省略
//沒省略
int(^block3)() = ^int{
return 3;
};
block3();
//省略
int(^block4)(NSString *) = ^(NSString *b){
return 4;
};
block4(@"hello");
2、作為屬性
@property (nonatomic, copy) 返回值類型 (^block的名稱)(參數類型);
@property (nonatomic, copy) returnType (^blockName)(parameterTypes);
3、作為方法聲明的參數
- (void)方法名:(返回值類型 (^)(參數類型))block的名稱;
- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;
4、作為方法實現的參數
[對象/類 方法名:^返回值類型 (參數) {...}];
[someObject someMethodThatTakesABlock:^returnType (parameters) {...}];
5、作為typedef
typedef 返回值類型 (^類型名稱)(參數類型);
類型名稱 block的名稱 = ^返回值類型(參數) {...};
typedef returnType (^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) {...};