iOS学习篇章4--block

来源:互联网 发布:淘宝dw旗舰店是真是假 编辑:程序博客网 时间:2024/06/13 08:22

Block

1、定义:

定义一个block变量,就相当于定义一个函数,使用「^」运算子来定义一个block 变量;

 int (^myBlock) (int a,int b) = ^(int a,int b){         return a+b;     };  

即:具有内嵌功能的匿名函数;


Block可以定义在方法内部,也可以定义在方法外部;

定义在方法外部,就是一个全局的变量;

定义在方法内部,就是方法的私有属性;


2、定义的格式:


回传值(^名字)(参数列);

 int (^myBlock) (int a,int b)
行为主体:

^(传入参数列){行为主体};

^(int a,int b){         return a+b;     };  


3、使用:

int sum = myBlock(11,22);

4、意义:

1.从定义来说,Block是可以代替回调函数,或者是delegate;
2.用来表示、简化一小段的程式码;
3.适合用来建立一些同步执行的程式片段、封装一些小型的工作;
4.用来做为某一个工作完成时的回传呼叫(callback);


5、__block关键字:

Block的{}体内,是不可以对外面的变量进行更改的;
加上__block修饰词,可以在block 中被修改。
__block int x = 123 ;void (^ModifyX)( int ) = ^( int y){x = x + y; NSLog("%@",x);};ModifyX(9);NSLog("%@",x);


6、__weak关键字:

__weak 在Block程序体内部访问外部的视图时(如UIButton,UIViewController等),
一定要加上__weak 防止,Block 对外部的UIViewController加强引用;
即避免循环引用
尤其是在使用Self 的关键字,实际就是对UIViewController的循环引用;
__weak ShopViewController *mShopVC = self;
然后再Block 使用 mShopVc 代替self的循环引用;

7、使用:

使用Block 最多的还是传递参数,和回调;

讲Block做为函数参数进行的传递;

以及现有的iOS中的包含的回调,GCD,UIViewController之间的跳转的动画,都是使用的Block;



0 0