Block

Block语法:

1 int (^sum)(int, int) = ^(int a, int b) {
2     return a+b;
3 };

以上代码定义了一个名为sum的Block对象,它带有两个int参数,返回int,等式右边就是Block的具体实现。

调用方法:

1 int i = sum(10, 20);
2 NSLog(@"%i", i);

 

使用typedef定义Block:

 1 typedef int (^Sum) (int, int);
 2 
 3 int main(int argc, const char * argv[])
 4 {
 5 
 6     @autoreleasepool {
 7         
 8         Sum sum = ^(int a, int b) {
 9             return a + b;
10         };
11         
12         NSLog(@"%i", sum(10, 20));
13         
14     }
15     return 0;
16 }

 

Block中可以访问局部变量,但默认是只读的,如果要改变局部变量,要在局部变量前面加上“__block”。

 1 typedef int (^Sum) (int, int);
 2 
 3 int main(int argc, const char * argv[])
 4 {
 5     
 6     @autoreleasepool {
 7         
 8         __block int c = 1;
 9         
10         Sum sum = ^(int a, int b) {
11             NSLog(@"c=%i", c);
12             c = 10; // 如果局部变量前没加__block会报错
13             return a + b;
14         };
15         
16         NSLog(@"%i", sum(10, 20));
17         
18     }
19     return 0;
20 }

 

posted on 2013-04-28 16:36  蓝易  阅读(204)  评论(0编辑  收藏  举报