在Object-C中,有一个新的语言机制,叫做Block。何为Block,我们可以将block理解为方法和对象的组合。block既像方法一样是一个逻辑模块,又像对象一样可以声明和传递
1. int (^adder)(int a,int b);
2. adder = ^int (int x,int y){
return x+y;
};
第一句为block的声明,声明有这么一个block,名称为adder,参数为两个int,返回值为一个int。
第二句为block定义,花括号内表明返回的是参数相加的结果。
3. NSLog(@"%d",adder(1,4));
在声明和定义过后,我们就可以对这个block进行调用了。
我们发现,其实block看起来很像方法。但是block实际上是一个对象。怎么理解呢,方法是面向过程的设计,也就是说,当我们需要实现某个功能时,直接调用相应的方法就OK了,但block有具体的作用域,我们需要先获得block对象。
从block的使用可以进一步看出block的意义。
block最常用于回调。所谓回调,就是在某个事件发生前预备好一段代码,相应的事件一旦发生,系统就会执行这段代码。回调,其实就是执行某一个准备好的方法。但是通常会有问题是,执行某个事件的类A并不知道在完成后具体应该做什么,而是调用A的类B知道应该怎么做,这时我们就需要回调。
回调常用的是代理模式delegate,和观察模式。这两种方式都会依赖对象,需要创建对象。在一些比较简单单一的情况下,我们并不想增加耦合。也不希望是这样的比较繁琐的方式。
这时block就十分好用,因为block也是对象,所以我们可以在B中定义block,然后将block发送给A,这样A在操作完成后,直接可以调用block,执行需要的操作