在现阶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的使用掌握的更多相关文章

  1. iOS开发——语法&高级Block练习

    高级Block练习 一 .最简单的block使用 使用block的三个步骤:1.定义block变量 2.创建block代码块 3.调用block匿名函数 定义一个block的构成包括:返回值,bloc ...

  2. 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536

    原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45)   阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...

  3. IOS 浅谈闭包block的使用

    前言:对于ios初学者,block通常用于逆向传值,遍历等,会使用,但是可能心虚,会感觉block很神秘,那么下面就一起来揭开它的面纱吧. ps: 下面重点讲叙了闭包的概念,常用的语法,以及访问变量, ...

  4. iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)

    iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)   使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: ...

  5. [Xarmrin.IOS]使用Build Host 在Windows上建置IOS程式及DeBug (转帖)

    使用Xamarin開發IOS程式時, 必須要在Mac上才可以編譯程式,若想在windows系統上編譯,則可透過Build host的方式, 但還是要有一台Mac的電腦就是了XD 首先你的Mac必須要已 ...

  6. [Xarmrin.IOS]使用Build Host 在Windows上建置IOS程式及DeBug

    使用Xamarin開發IOS程式時, 必須要在Mac上才可以編譯程式,若想在windows系統上編譯,則可透過Build host的方式, 但還是要有一台Mac的電腦就是了XD 首先你的Mac必須要已 ...

  7. IOS常见语法解惑

    由于工作过程中经常需要查看IOS的Objective-C代码,遂把一些常见的.有疑问的OC语法列出,方便之后会看,提升效率. Objective-C中的@语法 @interface告诉编译器,我要声明 ...

  8. iOS开发——语法OC篇&Block回顾

    Block回顾 这里知识简单介绍一下关于Block的语法,如果你觉得这里很简单或者想学习更深入的的使用清查看记者之前写的使用block传值和高级Block使用: http://www.cnblogs. ...

  9. ios学习笔记之block在ios开发中的应用

    一.什么是Blocks      Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block. 二. ...

随机推荐

  1. 分分钟搞定Python之排序与列表

    排序时程序中用得比较多的方法了.在Python中,最简单的排序方法摸过与使用内置的sorted(list)这个函数了,该函数一一个列表作为参数返回一个新的列表,只不过是把旧列表中的元素排过序了.原列表 ...

  2. 【WIN10】VisualStateManager使用說明

    Demo下載:http://yunpan.cn/cFjgPtWRHKH9H  访问密码 c4b7 顧名思義,視圖狀態管理器. 在WPF中,它的功能似乎更強大.在UWP中,閹割了GotElementSt ...

  3. BZOJ1878: [SDOI2009]HH的项链[树状数组+离线 | 主席树]

    题意: 询问区间不同种类颜色数 [2016-11-15] 离线好厉害 对于每一个区间询问,一个数只考虑一次,那么考虑他最后出现的一次 将询问按r排序 从1到n扫描,用树状数组维护一个位置应不应该考虑( ...

  4. [BZOJ5109]大吉大利,晚上吃鸡!

    [BZOJ5109]大吉大利,晚上吃鸡! 题目大意: 一张\(n(n\le5\times10^4)\)个点\(m(m\le5\times10^4)\)条边的无向图,节点编号为\(1\)到\(n\),边 ...

  5. [BZOJ4237]稻草人/[JOISC2014]かかし

    [BZOJ4237]稻草人/[JOISC2014]かかし 题目大意: 平面上\(n(n\le2\times10^5)\)个点,若一个矩形各边与坐标轴平行,左下角和右上角都在\(n\)个点之中,且内部不 ...

  6. Javascript 继承-原型的陷阱

    注:本文为翻译文章,原文为"JavaScript Inheritance – How To Shoot Yourself In the Foot With Prototypes!" ...

  7. Problem A: 象棋比赛

    Description 1月6日,教职工象棋协会在6号楼办了一次比赛,很多老师都参加了.比赛共进行了5轮,赢1局积3分,和了1分,输了0分,你能帮忙算一下各位老师的积分吗? Input 多组测试数据, ...

  8. 2018-2019-20172329 《Java软件结构与数据结构》第二周学习总结

    2018-2019-20172329 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 <Java软件结构与数据结构>第三章 集合概述--栈 一.集合 1.我们印 ...

  9. python3登录网页(163邮箱)实例

    # -*- coding: utf-8 -*- import urllibimport http.cookiejar as cookielibimport urllib.request as urll ...

  10. HDU 5700 区间交 离线线段树

    区间交 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5700 Description 小A有一个含有n个非负整数的数列与m个区间.每个区间可以表示为 ...