博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS学习之代码块(Block)
阅读量:4635 次
发布时间:2019-06-09

本文共 1939 字,大约阅读时间需要 6 分钟。

代码块(Block)

(1)主要作用:将一段代码保存起来,在需要的地方调用即可。

(2)全局变量在代码块中的使用

全局变量可以在代码块中使用,同时也可以被改变,代码片段如下:

1 int local = 1;//注意:全局变量2 void (^block0)(void) = ^(void){3     local ++;4     NSLog(@"local = %d",local);5 };    6 block0();7 NSLog(@"外部 local = %d",local);

结果为:local = 2;

外部 local = 2;

(3)局部变量在代码块中的使用

**一般的局部变量只能在代码块中使用,但不能被改变(此时无法通过编译),代码片段如下:

1 int n = 1000;//局部变量2 void (^block1)(void) = ^(void){3 //  n++;4     NSLog(@"float1 = %d",n);5 };6 block1();7 NSLog(@"float2 = %d",n);

结果为:float1 = 1000

float2 = 1000

**将局部变量声明为__block时,不仅可以在代码块中使用,同时也可以被改变。代码片段如下:

1 __block int j = 200;//声明为__block变量2 void (^block2)(void) = ^(void){3     j++;4     NSLog(@"块变量 = %d",j);5 };6 block2();7 NSLog(@"快变量2 = %d",j);

结果为:块变量 = 201

快变量2 = 201

(4)代码块作为方法参数使用

自定义类:

首先BlockClasss.h类:

1 #import 
2 3 @interface BlockClasss : NSObject 4 5 //声明int型变量 6 @property (nonatomic,assign)int result; 7 @property (nonatomic,assign)int result2; 8 9 - (int)result:(int (^)(int))block;10 11 - (BlockClasss *(^)(int value))add;12 @end

然后BlockClasss.m的实现:

1 #import "BlockClasss.h" 2  3 @implementation BlockClasss 4 - (int)result:(int (^)(int))block{ 5     _result = block(_result); 6     return _result; 7 } 8  9 - (BlockClasss *(^)(int))add{10     return ^BlockClasss *(int value){11         _result2 += value;12         return self;13     };14 }15 @end

代码块作为方法参数的使用代码:

1 BlockClasss *bl = [[BlockClasss alloc]init];2 [bl result:^int(int result) {3     result += 10;4     result *= 2;5     return  result;6 }];7 NSLog(@"result = %d",bl.result);

结果为:result = 20

(5)代码块作为方法返回值使用:

1 BlockClasss *bl2 = [[BlockClasss alloc]init];2 bl2.add(100).add(200);3 NSLog(@"结果 ^=%d",bl2.result2);

打印结果为:结果 ^=300

(6)避免循环引用

在代码块中不能使用self或者_XXX,以免发生循环引用。最好是将self在外部定义为__weak属性,然后再去使用。

例如:

1 __weak self weakSelf = self;2 _block = ^{3     NSLog(weakSelf.result);4 };

 

posted on
2016-11-20 22:54 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/calence/p/6083902.html

你可能感兴趣的文章
python时间日期字符串各种
查看>>
儿子和女儿——解释器和编译器的区别与联系
查看>>
第一阶段冲刺3
查看>>
2014百度面试题目---“求比指定整数大且最小的不重复数”解答
查看>>
父类引用指向子类对象
查看>>
linux epoll用法
查看>>
viewport使用 html5
查看>>
网页如何实现下载功能
查看>>
IT男专用表白程序
查看>>
maven转gradle ,windows错误重定向
查看>>
jenkins+ant+jmeter接口测试
查看>>
【BZOJ】2120: 数颜色
查看>>
Html_div圆角
查看>>
WPF——OXY绘图
查看>>
点击复制代码
查看>>
UVa 10051 Tower of Cubes(类似LIS)
查看>>
0x02 mysql 表格相关操作
查看>>
采购申请->MRP
查看>>
双击进入物料数据的指定视图
查看>>
配置mysql主从服务器
查看>>