标签:
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