IOS程式语法之block的使用掌握
在现阶IOBlock 是iOS在4.0之后新增的程式语法,严格来说block的概念并不算是基础程式设计的范围,对初学者来说也不是很容易了解,但是在iOS SDK 4.0之后,block几乎出现在所有新版的API之中,换句话说,如果不了解block这个概念就无法使用SDK 4.0版本以后的新功能,所以我们必须要熟练掌握block的使用
1、正则开始我们先认识一下如何来定义一个简单的block
//1 无参数无返回值
void (^ MyBlock1)(void); //2 有参数无返回值
void (^ MyBlock2)(int a,int b); //3 有参数有返回值
int (^ MyBlock3)(int a,int b);
2、针对block的声明,我们如何真正意义上的实现他呢?下面我们探讨一下如何实现一个有功能的block,我们拿第一个为例子
void (^ MyBlock1)(void)=^(void){
NSLog(@"这是我的第一个block");
};
这样我们就成功的实现了一个bock,上面是针对了没有返回值的block,针对有返回值的如何实现呢,同样的类似于函数,你只要在最后返回即可了,比如我们用第三个距离,返回两个数之间的和
int (^ MyBlock3)(int a,int b)=^(int a,int b ){
return a+b;
};
3、上面我们完成了block得定义和实现,下面我们会考虑如何使用他了吧,其实使用bock是非常简单的,我们只需要按照使用函数那样使用就可以了,如下所示
// 调用block1(无返回值无参数)
MyBlock1(); // 调用block3(有返回值有参数)
int value= MyBlock3(,);
4、block作为参数,在开发app的时候你会发现很多情况下都是block作为参数,这也是block的广泛应用之一,下面我们看看如何让block在作为参数,现在我们定义Dog对象,DOG对象里面有属性和行为,如下

同时定义一个主人类,主人拥有狗,主人可以对狗发布指令,狗根据不同的指令来执行不同的操作,这里我们采取块的形式,将指令通过块传递信息,此时我们就需要用到块作为参数:

实现部分如下

在main函数中,我们按照如下方式引用即可
Host * host=[[Host alloc] init];
Dog * dog=[[Dog alloc] init];
dog.name=@"dahuang";
host.dog=dog; //0 将指令封装到block中然后传递信息
void (^ myDog)(Dog *dog)= ^(Dog *dog) {
[dog run];
[dog canBark];
[dog speakName];
}; //1 告诉狗要做的事情
[host askDog:myDog]; //2 让狗去做
[host toDo];
5、__block 关键字,block可以作为参数进行传递,因此block的执行时机可能不是很确定,所以当我们需要在block里面,将执行的结果赋值给外面的变量的时候需要注意一点,如果想把block的结果赋值给局部变量,则会报错,原因是当你执行block的时候你的局部变量可能已经销毁了,所有block的不能直接给局部变量赋值,当然如果是全局变量是可以的。Block还引入了另一种关键字,将局部变量的生命周期变为和全局变量一样即可,这样我们就能给局部变量赋值了,如下所示:
__block int sum=;
void (^ myBlock) (int,int)=^(int a ,int b){
sum=a+b;
};
出处:http://www.cnblogs.com/jerehedu/
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:

IOS程式语法之block的使用掌握的更多相关文章
- iOS开发——语法&高级Block练习
高级Block练习 一 .最简单的block使用 使用block的三个步骤:1.定义block变量 2.创建block代码块 3.调用block匿名函数 定义一个block的构成包括:返回值,bloc ...
- 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536
原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45) 阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...
- IOS 浅谈闭包block的使用
前言:对于ios初学者,block通常用于逆向传值,遍历等,会使用,但是可能心虚,会感觉block很神秘,那么下面就一起来揭开它的面纱吧. ps: 下面重点讲叙了闭包的概念,常用的语法,以及访问变量, ...
- iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)
iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值) 使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: ...
- [Xarmrin.IOS]使用Build Host 在Windows上建置IOS程式及DeBug (转帖)
使用Xamarin開發IOS程式時, 必須要在Mac上才可以編譯程式,若想在windows系統上編譯,則可透過Build host的方式, 但還是要有一台Mac的電腦就是了XD 首先你的Mac必須要已 ...
- [Xarmrin.IOS]使用Build Host 在Windows上建置IOS程式及DeBug
使用Xamarin開發IOS程式時, 必須要在Mac上才可以編譯程式,若想在windows系統上編譯,則可透過Build host的方式, 但還是要有一台Mac的電腦就是了XD 首先你的Mac必須要已 ...
- IOS常见语法解惑
由于工作过程中经常需要查看IOS的Objective-C代码,遂把一些常见的.有疑问的OC语法列出,方便之后会看,提升效率. Objective-C中的@语法 @interface告诉编译器,我要声明 ...
- iOS开发——语法OC篇&Block回顾
Block回顾 这里知识简单介绍一下关于Block的语法,如果你觉得这里很简单或者想学习更深入的的使用清查看记者之前写的使用block传值和高级Block使用: http://www.cnblogs. ...
- ios学习笔记之block在ios开发中的应用
一.什么是Blocks Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block. 二. ...
随机推荐
- oneDay
难受过 迷茫过 失望过 耍脾气过 开心过 伤心过 疼过 走了这么久的路: 我只想说 程序的道路上 很难走: 本来准备都放弃了: 自己逼自己了很久想明白了: 不能什么时候都想着靠外力 自己的不足就是自己 ...
- 九大工具助你玩转Java性能优化
在这篇文章中,我会带着大家一起看一下9个可以帮助我们优化Java性能的工具.有一些我们已经在IDR Solutions中使用了,而另外一些有可能在个人项目中使用. NetBeans Profiler ...
- [luogu4389]付公主的背包(多项式exp)
完全背包方案计数问题的FFT优化.首先写成生成函数的形式:对重量为V的背包,它的生成函数为$\sum\limits_{i=0}^{+\infty}x^{Vi}=\frac{1}{1-x^{V}}$于是 ...
- 【10.6校内测试】【小模拟】【hash+线段树维护覆盖序列】
一开始看到题就果断跳到T2了!!没想到T2才是个大坑,浪费了两个小时QAQ!! 就是一道小模拟,它怎么说就怎么走就好了! 为什么要用这么多感叹号!!因为统计答案要边走边统计!!如果每个数据都扫一遍20 ...
- 理解 JavaScript 中的 Function.prototype.bind
函数绑定(Function binding)很有可能是你在开始使用JavaScript时最少关注的一点,但是当你意识到你需要一个解决方案来解决如何在另一个函数中保持this上下文的时候,你真正需要的其 ...
- spring---transaction(2)---源代码分析(事务的定义TransactionDefinition)
写在前面 事务属性通过TransactionDefinition接口实现定义,主要有事务隔离级别.事务传播行为.事务超时时间.事务是否只读. public interface TransactionD ...
- ThinkPHP使用纯真IP获取物理地址时中文乱码问题
今天在用ThinkPHP通过纯真IP获取地址时,发现输出结果中文乱码,如图: 经查发现ThinkPHP的IpLocation.class.php类文件中说明:“由于使用UTF8编码 如果使用纯真IP地 ...
- OpenCV 机器学习之 支持向量机的使用方法实例
用支持向量机进行文理科生的分类,根据的特征主要是 数学成绩与语文成绩,这两个特征都服从高斯分布 程序代码例如以下: 分类结果:
- 3D单机游戏《天鹰教》源码发布(二)
3D单机游戏<天鹰教>源码发布 作者 作者: 游蓝海 博客: http://blog.csdn.net/you_lan_hai mail: you_lan_hai@foxmail. ...
- 我对NHibernate的感受(3):有些尴尬的集合支持
既然是一个ORM框架,那么自然是将O这一端映射R上.至于集合,是O这方面最常见,也是R这一边非常容易表示的关系.例如,一个问题(Question)可以包含多个回答(Answer),于是我的代码里就有这 ...