标签:
Block
1, 定义block(无参数,无返回值)
//第一种方法
^{
NSLog(@"hello block!!!");
};
//第二种方法
(void) (^firstBlock)(void);
firstBlock = ^{
NSLog(@"hello block!!!");
};
//第三种方法,其实第二种一样,只上直接给block赋值了
(void) (^firstBlock)(void) = ^{
NSLog(@"hello block!!!");
};
2, 定义block(有参数,有返回值)
//第一种方法
^ (double a, double b) {
return a + b;
};
//第二种方法
double (^addTwoVlaues)(double, double) = ^(double a, double b) {
return a + b;
};
//调用block
double result = addTwoVlaues(5, 10);
NSLog(@"result is %f", result);
3, block 可以访问外部变量
//第一种
- (void) testMethod() {
int value = 35;
void (^testBlock) (void) = ^ {
NSLog(@"value is: %i", value);
}
testBlock();
};
//output: value is 35
//第二种
- (void) testMethod() {
int value = 35;
void (^testBlock) (void) = ^ {
NSLog(@"value is: %i", value);
}
value = 45;
testBlock();
};
//output: value is 35
//如果在定义了block之后和调用之前,即使改变了外部变量的值,也不会对block产生影响
//如果想让blcok中甬道的变量值也改变,就需要标识为寄存器变量
//第三种
- (void) testMethod() {
__block int value = 35;//寄存器变量
void (^testBlock) (void) = ^ {
NSLog(@"value is: %i", value);
}
value = 45;
testBlock();
};
//output: value is 45
4, block作为参数传递
//参数为callBackBlock
- (void)methodWithCallBackBlock: (void)(^)(void) callBackBlock;
//在方法内部使用参数callBackBlock
- (void)methodWithCallBackBlock: (void)(^)(void) callBackBlock {
callBackBlock();
}
5. block typedef
typedef void( ^TypedefBlock)(void);
TypedefBlock typedefBlock= ^{
NSLog(@"this is a typedef block");
};
标签:
原文地址:http://www.cnblogs.com/xiaolianghhd/p/4183945.html