文档章节

block的用法

土豆伴牛肉
 土豆伴牛肉
发布于 2016/01/09 20:04
字数 735
阅读 11
收藏 1

1.  block的声明:

声明block变量的语法格式:

    返回值类型 (^block变量的名称)(参数列表);


     int (^myBlock3)(int num1,int num2);

2. block的初始化

 ^返回值类型(参数列表){

            代码段;

         };

3.block的简写

1. 如果我们写的代码段没有返回值.那么代码段的void可以省略.

         void (^myBlock1)() =  ^(){

             NSLog(@"我爱你");

             NSLog(@"我恨你");

         };

         注意,我说的是代码段的返回值如果是void可以省略,声明block变量的返回值无论是什么不可以省略.

2. 如果我们写的代码段没有参数,那么代码段的小括弧写可以省略.


         int (^myBlock2)() =  ^int{

             int num1 = 10 + 20;

             return num1;

         };

         再次强调: 我们说的是代码段.


         所以,当1个代码段既没有参数,也没有返回值的适合,就只写^


         void (^myBlock1)() =  ^{

             NSLog(@"我爱你");

             NSLog(@"我恨你");

         };

3. 声明block变量的时候.如果有指定参数.可以只写参数的类型而不写参数的名称;


     int (^myBlock3)(int,int) =  ^int(int num1,int num2){

         int num3= num1 + num2;

         return num3;

     };

     注意: 这个地方我们说的是声明block变量的时候 再写代码段的时候 类型和名称都要写.

4. 无论代码段是否有返回值.在写代码的时候.可以不写返回值类型 省略.

        如果在写代码段的时候,省略了返回值,这个时候系统会自动的确定返回值的类型.


        如果代码段中没有返回任何数据 那么它会认为这个代码段是没有返回值的.

        如果代码中有返回数据 返回的数据是什么类型 它就会认为这个代码段是什么类型的.

4.关于block访问外部变量的问题

  1.  在block代码块的内部可以取定义在外部的变量的值, 定义在外部的局部变量和全局变量.

  2.  在block代码块的内部可以修改全局变量的值.但是不能修改定义在外部的局部变量的值.

  3.  如果你希望我们定义的局部变量可以允许在block代码的内部去修改,那么就为这个局部变量加1个__block的修饰符.

注意

 1.  block是1个数据类型.

 2.  block变量是来存储1段代码的.

 3.  block变量的声明.

 4.  block变量的初始化

 5.  执行存储在block变量中的代码.

 6.  关于4个简写.

 7.  使用typedef将复杂的block定义简化.

 8.  访问外部变量的问题.


5.关于block循环使用的注意

使用block的时候,如果有循环引用,编译器会提示警告。

如果对象没有持有Block对象,那么不会产生循环引用。如果对象持有了block对象,那么在block引用self的时候这么定义:

__weak typeof(self) weakSelf = self;


© 著作权归作者所有

土豆伴牛肉
粉丝 1
博文 9
码字总数 1476
作品 0
海淀
程序员
私信 提问

暂无文章

springboot 整合redis

springboot整合redis官方是有文档的: 英文看不懂可以翻译,代码应该看得懂, 这个是自动注入的。当然也可以xml注入,手动配置。 整合步骤: pom文件: <!-- spring boot web --> ...

jason_kiss
18分钟前
0
0
手机耗电问题,大部分是没有正确使用这个“锁”

当安卓设备闲置时,设备很快会进入休眠状态,以达到省电和减少CPU占用的目的。但有些应用在手机灭屏甚至系统休眠时,依然频繁占用CPU处理事件或唤醒屏幕提示用户消息,这类行为会导致手机耗电...

安卓绿色联盟
19分钟前
0
0
UI 设计中的渐变

>**简评:**渐变是通过两种或多种不同的色彩来绘制一个元素,同时在颜色的交界处进行衰减变化的一种设计。从拟物到扁平再到渐变,人们慢慢发现它能创造出从未有过的一种色彩感觉 —— 独特、...

极光推送
25分钟前
0
0
powerdesigner name 转注释vb脚本

Option Explicit ValidationMode = True InteractiveMode = im_BatchDim mdl ' the current model' get the current active model Set mdl = ......

zhu97
30分钟前
1
0
V2Ray的安装与使用

1 1. bash <(curl -s -L https://git.io/v2ray.sh)yum update -y && yum install curl -y安装好 curl 之后就能安装脚本了输入快捷管理命令v2ray后,开始进行v2ray服务端配置...

吕湘颖
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部