清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
block是对象,它封装了一段代码,这段代码可以在任何时候执行。block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:block是inline的,并且它对局部变量是只读的。 Block的定义: int (^myBlock) (int a,int b) = ^(int a,int b){ return a+b; }; 定义了一个名为myBlock的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现,是不是有点像方法的定义? Block可以访问局部变量,但是不能修改。比如下面的代码就会报编译错 int num = 0; //使用block int (^myBlock) (int a,int b) = ^(int a,int b){ num = a+b; return num; }; 如果要修改就要加关键字:__block (注意,是两个下划线"_") __block int num = 0; //使用block int (^myBlock) (int a,int b) = ^(int a,int b){ num = a+b; return num; }; 作为函数的参数,blocks某种意义上替代了回调函数或者delegate。当函数调用了,假设某个事件触发,这时block里的内容就会运行。这样有利于代码的整合和阅读,你不需要到处去实现委托方法了。