一、block的简介

  block可以说是类似C语言的函数,苹果是推荐我们使用block的。block效率高,可以用来封装和保存代码,可以有返回值和形参,而且可以在任何时候执行。

block的标识符是  ^

从上面的2各例子可以看出,block有不同的类型,分别有:无参无返,无参有返,有参无返,有参有返4种类型

我们可以根据自己需求使用不同类型的block完成我们的代码实现。

二、block的基本使用

利用block封装代码

//无参无返形式

void (^block)() = ^{
        // 你封装的代码
    };

在你需要的时候调用block

我们在开发的时候就可以发现,我们使用的API有很多都是使用了block,因为block可以实现在不同时候不同视图之间的通信,因为block可以在任何时候任何地方执行,因此当我们在某个地方要实现某个功能的时候,又因为缺少参数或者缺少某个方法等等的原因,我们就可以考虑用block去帮我们实现

具体如何实现不同页面的通讯需要你自己体会去

还要注意的是

block访问外部变量

1)block内部可以访问外部变量;

2)默认情况下,Block内部不能修改外部的局部变量

3)给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改。

4)在block实现的内部不能使用self. 使用self.会引起循环引用

需要用__weak 修饰一下,例如:

__weak ViewController *VC = self;
    void (^block)() = ^{
        VC.string = @"hello work!";
    };