iOS中block初体验
来源:互联网 发布:分体式集成灶 知乎 编辑:程序博客网 时间:2024/05/08 20:43
小白一枚,被block代理什么的折磨了好久,到现在也没有完全弄明白block是怎么一回事,今天在看李明杰老师视频学习的时候总结了一些基本概念,不对的地方,还请众神指点呀。
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开发工作,希望和大家共同学习。
写的内容主要是给和我一样的小白们相互了解学习的,路过大神多指导哈。
- iOS中block初体验
- ios 中使用 block
- ios中Block语法
- iOS中block用途
- IOS中 Block
- IOS中Block问题
- iOS中block(3)
- iOS中block(4)
- iOS中Block介绍
- iOS中Block介绍
- ios中Block介绍
- iOS中Block介绍
- iOS 中^block 示例
- IOS中Block小结
- iOS中Block总结
- iOS中-Block使用
- IOS中块Block
- iOS中-Block使用
- C++和MATLAB混合编程-DLL篇
- 单片机指令是如何执行的
- 从僵尸网络追踪到入侵检测 第6章 Honeyd日志使用
- LeetCode Jump Game
- 003_eclipse安装教程
- iOS中block初体验
- c/c++中指针的理解(初学者)
- Linux FTP 服务器配置简单说明
- 搭建QT和VS2010集成开发环境
- UITextField - 常用属性及设置
- SQLite数据库存储
- 寒假学习计划
- Linux 开机引导与关机过程
- Javascript编写的简易计算器