iOS中block初体验
2016-01-11 19:40
281 查看
小白一枚,被block代理什么的折磨了好久,到现在也没有完全弄明白block是怎么一回事,今天在看李明杰老师视频学习的时候总结了一些基本概念,不对的地方,还请众神指点呀。
block书写格式:
返回值类型(^ block名称)(参数列表)=^{代码块}
下面先一步步 从无返回值无参数 到有返回值有参数的block开始
1. 首先看一个无返回值无参数
例:
详解:
先理解它的这个结构 以等号左右说明 定义部分=赋值部分
{}内的才为代码块
第4行才是这个block的调用部分 此时2行才真正的执行。
2. 有参数有返回值的block
我始终搞不懂为什么要用到block 尽管百度出各种好处但是没有码代码光理解 确实记一次忘一次熊瞎子掰苞米来着。
下面有这样一个需求,要有一个只执行加法的盒子 相当于计算器,每次我只负责填两个数字加到盒子里 结果则由盒子给我输出来。
下面这样操作,我要设置这个盒子,他的内部功能就是执行加法操作 入口呢则是我向盒子里面填两个数字 出口则是他执行完输出结果。
这里的
第1步 输入过程就是输入参数
第2步 就是代码块
第3部 就是调用代码块部分。
码代码过程 如果开始学习 建议先从第2部分也就是等号右边开始写,这部分是需要重复执行的代码,就是那个运算过程,然后再声明一个block对象,并把等号右边的赋值给这个对象。
好啰嗦 看代码吧
block其实和NSString一样 需要定义对象( =号左侧) ,给对象赋值(=号右侧)。
调用部分 可以循环n次 是不是很方便?! 不用每次都写{}里面的内容了?!
详解:
3.还有一个typedef的问题 这有问题的话 大概就是因为没有搞懂block 谁是对象 谁是数据类型。typedef的作用 就是重新定义一个数据类型 。
先看代码
发现规律没?第1行 定义block类型的时候,重复相同代码,也就是sumBlock、subBlock、subBlock三个block对象 用的是相同的block数据类型来定义的,就好比nsstring定义3个对象一样。
因为block类型重复 需要重复写 然而程序员又是那么聪明(lan)所以就用typedef来重新定义block的数据类型。看代码 。
End : litter white 刚刚开始iOS开发工作,希望和大家共同学习。
写的内容主要是给和我一样的小白们相互了解学习的,路过大神多指导哈。
block书写格式:
返回值类型(^ block名称)(参数列表)=^{代码块}
下面先一步步 从无返回值无参数 到有返回值有参数的block开始
1. 首先看一个无返回值无参数
例:
1.1 void(^myblock)( ) ; myblock=^{ NSLog(@"+++++++"); } myblock( ); //调用部分 1.2(和1.1作用相同) void(^myblock)( ) ; myblock=^{ NSLog(@"+++++++"); } myblock( ); //调用部分
详解:
先理解它的这个结构 以等号左右说明 定义部分=赋值部分
{}内的才为代码块
第4行才是这个block的调用部分 此时2行才真正的执行。
2. 有参数有返回值的block
我始终搞不懂为什么要用到block 尽管百度出各种好处但是没有码代码光理解 确实记一次忘一次熊瞎子掰苞米来着。
下面有这样一个需求,要有一个只执行加法的盒子 相当于计算器,每次我只负责填两个数字加到盒子里 结果则由盒子给我输出来。
下面这样操作,我要设置这个盒子,他的内部功能就是执行加法操作 入口呢则是我向盒子里面填两个数字 出口则是他执行完输出结果。
这里的
第1步 输入过程就是输入参数
第2步 就是代码块
第3部 就是调用代码块部分。
码代码过程 如果开始学习 建议先从第2部分也就是等号右边开始写,这部分是需要重复执行的代码,就是那个运算过程,然后再声明一个block对象,并把等号右边的赋值给这个对象。
好啰嗦 看代码吧
int(^mumblock)(int,int); //定义 block类型;声明block对象mumblock部分 相当于int a; mumblock=^(int a, int b){ //赋值部分 相当于int a =3; return a-b; //代码块部分 }; NSLog(@"%d",sumblock(10,20));//调用部分 //输出结果 30
block其实和NSString一样 需要定义对象( =号左侧) ,给对象赋值(=号右侧)。
调用部分 可以循环n次 是不是很方便?! 不用每次都写{}里面的内容了?!
详解:
/// 需求是计算a+b 1 写出{ }内的内容, /// 需求传参数 2 所以在{ }左侧写上^(int a,int b) /// 需要将现在的block赋值给一个block类型变量 先去声明变量(下面��) /// 声明block类型变量 3 int(^mumblock)(int,int); /// 将2种定义的代码块(对象值) 赋值给声明的block类型的变量mumblock; 4 sumblock=^(int a,int b){ return a+b; }; /// 完整的block int (^sumblock)(int,int)=^(int a,int b){ return a+b; }; NSLog(@"%d",sumblock(10,20));
3.还有一个typedef的问题 这有问题的话 大概就是因为没有搞懂block 谁是对象 谁是数据类型。typedef的作用 就是重新定义一个数据类型 。
先看代码
int(^sumBlock)(int,int)=^(int a,int b){ //block类型定义 return a+b; }; int(^subBlock)(int,int)=^(int a, int b){//block类型定义 return a-b; }; int(^mulBlock)(int,int)=^(int a, int b){//block类型定义 return a*b; }; //调用 NSLog(@"%d,%d,%d",sumblock(10,20),subblock(10,5),mulBlock(3,3)); 输出结果:30,5,9
发现规律没?第1行 定义block类型的时候,重复相同代码,也就是sumBlock、subBlock、subBlock三个block对象 用的是相同的block数据类型来定义的,就好比nsstring定义3个对象一样。
因为block类型重复 需要重复写 然而程序员又是那么聪明(lan)所以就用typedef来重新定义block的数据类型。看代码 。
typedef int(^MyTypedefBlock)(int,int); MyTypedefBlock sumBlocl=^(int a,int b){ return a+b; }; MyTypedefBlock subBlocl== ^(int a,int b){ return a-b; }; MyTypedefBlock mubBlocl== ^(int a,int b){ return a*b; }; //调用 NSLog(@"%d,%d,%d",sumblock(10,20),subblock(10,5),mulBlock(3,3)); 输出结果:30,5,9 // 两种结果相同 所以不要乱 首先明白 那个是block的数据类型是什么,再知道这个类型定义的对象是谁,谁又给这个对象赋值的。typedef只是减少了代码 看起来更清楚了。
End : litter white 刚刚开始iOS开发工作,希望和大家共同学习。
写的内容主要是给和我一样的小白们相互了解学习的,路过大神多指导哈。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Ruby中Block和迭代器的使用讲解
- Ruby中使用Block、Proc、lambda实现闭包
- Ruby中的block、proc、lambda区别总结
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件