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 }