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

  Block很像匿名方法,但实际上它是一种类型,它是用来封装保存代码的,只要用block封装的代码,可以在任何时候执行。Block效率很高,不仅可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。

  苹果官方建议尽量多用block。在多线程、异步任务、集合遍历、集合排序、动画转场用的很多。

一、Block定义

返回值 (^ 块名)(参数1,参数2…);

代码

    //无参无返回值的block
void (^MyBlocks1)(); //参数为整型的block
void (^MyBlocks2)(int); //参数为NSString的block
void (^MyBlocks3)(NSString *); //多个参数,有返回值的block
BOOL (^MyBlocks4)(int, int);

二、Block实现

^(参数1,参数2…){操作主体};

代码

     MyBlocks1 = ^{
NSLog(@" MyBlocks1");
}; MyBlocks2 = ^(int num){
NSLog(@" MyBlocks2,参数为%i",num);
}; MyBlocks3 = ^(NSString *str){
NSLog(@" MyBlocks3,参数为%@",str);
}; MyBlocks4 = ^(int num1, int num2){
NSLog(@" MyBlocks4");
if (num1>num2)
return YES;
else
return NO;
};

  三、声明的同时实现

代码

int (^myBlocks5)(int, int) = ^(int num1, int num2){
return num1>num2?num1:num2;
};

  四、代码块中的全局变量和局部变量

  在块中可以使用全局变量也可以使用局部变量,但是在块外面声明的实例变量默认情况下,在块中只能使用,但是不能修改。如果想修改,需要在变量前面添加__block

代码

    int num1 = ;
__block int num2 = ;
void (^myBlocks6)() = ^(){
NSLog(@"num1=%i, num2=%i",num1,num2);
//num1 += 10; //错误!!!
num2 += ;
};

  五、Block的调用

块名(实参1,实参2…);

代码

int number = myBlocks5(, );
myBlocks6();

  六、Block作为参数

代码

//方法的声明
+ (void)dowmloadImg:(NSString *)url success:(void(^)(NSString *pic))success failure:(void(^)(NSString *error))failure; //方法的实现
+ (void)dowmloadImg:(NSString *)url success:(void (^)(NSString *pic))success failure:(void (^)(NSString *error))failure {
BOOL flag = NO;
if (flag) {
success([NSString stringWithFormat:@"这是一张图片%@", url]);
} else {
failure(@"下载失败");
}
} //方法的调用
[Test dowmloadImg:@"http://www.jerehedu.com/images/temp/logo.gif" success:^(NSString *pic) {
NSLog(@"%@", pic);
} failure:^(NSString *error) {
NSLog(@"%@", error);
}];
作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

技术咨询:
 

IOS之Block讲解的更多相关文章

  1. iOS中Block介绍(一)基础

    ios开发block的使用指南,以及深入理解block的内存管理,也适用于osx开发.讨论范围:block的使用,内存管理,内部实现.不包含的内容:gc arc下的block内存,block在c++中 ...

  2. iOS中Block介绍 基础

    ios开发block的使用指南,以及深入理解block的内存管理,也适用于osx开发.讨论范围:block的使用,内存管理,内部实现.不包含的内容:gc arc下的block内存,block在c++中 ...

  3. iOS中block的用法 以及和函数用法的区别

    ios中block的用法和函数的用法大致相同 但是block的用法的灵活性更高: 不带参数的block: void ^(MyBlock)() = ^{}; 调用的时候  MyBlock(); 带参数的 ...

  4. iOS开发--Block

    iOS开发--Block 1.什么是Block,block 的作用 ui开发和网络常见功能实现回调,按钮的事件处理方法是回调方法以及网络下载后的回调处理 (1)按钮 target-action   一 ...

  5. iOS KVC详细讲解

    iOS KVC详细讲解 什么是KVC? KVC即NSKeyValueCoding,就是键-值编码的意思.一个非正式的 Protocol,是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取 ...

  6. iOS之block

    1. Block的声明和线程安全Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC ...

  7. iOS开发——Block详解

    iOS开发--Block详解 1. Block是什么 代码块 匿名函数 闭包--能够读取其他函数内部变量的函数 函数变量 实现基于指针和函数指针 实现回调的机制 Block是一个非常有特色的语法,它可 ...

  8. ios开发 block语句块

    ios开发 block语句块 1.block 理解为匿名函数 2.block变量的定义 //定义block变量,^表示定义block //技巧:函数名左右加括号,在函数名前面在加^ void (^bl ...

  9. iOS 中Block以及Blocks的使用,闭包方法调用

    OC: -(void)dataWithUrl:(NSString*)string AndId:(NSInteger)id returnName:(void(^)(NSString*name))back ...

随机推荐

  1. python 对字典"排序"

    对字典进行排序?这其实是一个伪命题,搞清楚python字典的定义---字典本身默认以key的字符顺序输出显示---就像我们用的真实的字典一样,按照abcd字母的顺序排列,并且本质上各自没有先后关系,是 ...

  2. python脚本 pyqt 打包成windows可执行exe文件 pyinstaller

    今天学习pyqt,做了一些好玩的东西. 好奇之中想试试python脚本编译成可执行文件,一顿查询之后成功了! 我的环境是: windows10 64bit    python3.5    pyqt5 ...

  3. hdu 4536 dfs

    题意:XCOM-Enemy Unknown是一款很好玩很经典的策略游戏.在游戏中,由于未知的敌人--外星人入侵,你团结了世界各大国家进行抵抗.随着游戏进展,会有很多的外星人进攻事件.每次进攻外星人会选 ...

  4. angularJS简介及其特点—— 五大特性,加快 Web 应用开发

    AngularJS 是谷歌的一个 JavaScript 框架,旨在简化前端应用程序的开发. 一. 关于和jquery的比较 首先angular是一个mvc框架,它与jquery不同之处在于,前者致力于 ...

  5. Codeforces Beta Round #37 C. Old Berland Language 暴力 dfs

    C. Old Berland Language 题目连接: http://www.codeforces.com/contest/37/problem/C Description Berland sci ...

  6. UVALive 6257 Chemist's vows

    #include<iostream> #include<string.h> #include<stdio.h> #include<ctype.h> #i ...

  7. CSS Flex布局属性整理

    Flex布局 display: flex; 将对象作为弹性伸缩盒展示,用于块级元素 display: inline-flex; 将对象作为弹性伸缩盒展示,用于行内元素 注意兼容问题: webkit内核 ...

  8. iOS开发里的Bundle是个啥玩意?!

    初学iOS开发的同学,不管是自己写的,还是粘贴的代码,或多或少都写过下面的代码 [[NSBundle mainBundle] pathForResource:@"someFileName&q ...

  9. MVC扩展生成CheckBoxList并水平排列

    本篇体验生成CheckBoxList的几个思路,扩展MVC的HtmlHelper生成CheckBoxList,并使之水平排开.     通过遍历从控制器方法拿到的Model集合 □ 思路 比如为一个用 ...

  10. kafka分区原理图

    一个Topic的多个分区,被分布在kafka集群中的多个server上.每一个分区都有一个server为"leader";leader负责全部的读写操作,假设leader失效,那么 ...