[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/wvqusrtg/p/4502906.html