[Objective-c 基础

A.概念

1.block类似函数
(1)可以保存代码
(2)有返回值
(3)有形参 
2.block的标志:^
 1     // 没有参数和返回值的block
 2     void (^myblock)() = ^{ // 没有形参,可以省略()
 3         NSLog(@"这是新定义的block");
 4     };
 5    
 6     myblock();
 7  
 8     // 带参数和返回值的block
 9     int (^sum)(int a, int b) = ^(int a, int b){
10         return a + b;
11     };
12    
13     int c = sum(10, 11);
14     NSLog(@"%d", c);
 
3.可以访问代码块外的数据
1     int a = 10;
2     void (^block)();
3     block = ^{
4         NSLog(@"a = %d", a);
5     };
6     block();
out:
2014-11-15 09:25:34.766 04-block[1355:303] a = 10
 
4.不能修改代码块外的局部变量
1     int a = 10;
2     void (^block)();
3     block = ^{
4         a = 20; // 默认情况下, block内部不能修改外面的局部变量
5         NSLog(@"a = %d", a);
6     };
7     block();
 
解决:给局部变量加上”__block”(双下划线开头)关键字
1     __block int a = 10;
2     void (^block)();
3     block = ^{
4         a = 20; // error
5         NSLog(@"a = %d", a);
6     };
7     block();
out:
2014-11-15 09:28:52.814 04-block[1376:303] a = 20
 
5.使用typedef
 1 typedef int (^MyBlock) (int, int);
 2  
 3     MyBlock sumBlock;
 4     sumBlock = ^(int a, int b){
 5         return a + b;
 6     };
 7    
 8     MyBlock minusBlock;
 9     minusBlock = ^(int a, int b){
10         return a - b;
11     };
 
原文地址:https://www.cnblogs.com/hellovoidworld/p/4119380.html