博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS之Block讲解
阅读量:6435 次
发布时间:2019-06-23

本文共 2064 字,大约阅读时间需要 6 分钟。

  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 *);    //多个参数,有返回值的blockBOOL (^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;        elsereturn NO; };

  三、声明的同时实现

代码

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

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

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

代码

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

  五、Block的调用

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

代码

int number = myBlocks5(10, 20);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);    }];

 

作者:杰瑞教育
出处:
 
版权声明:本文版权归
技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:
 

转载于:https://www.cnblogs.com/jerehedu/p/4891029.html

你可能感兴趣的文章
CoolHash数据库的产品宣言(Fourinone4.0版)
查看>>
TI-BASIC 计算器游戏开发之文字、图形、音频教程:前言
查看>>
SpringMVC 学习系列 (2) 之 经典的HelloWorld 实现
查看>>
Java并发编程基础-线程-创建
查看>>
Caused by: java.sql.SQLException: ORA-00911: inval
查看>>
JavaScript 模块应用与编程
查看>>
Tomcat源码解读系列(三)——Tomcat对HTTP请求处理的整体流程
查看>>
ZTREE学习二
查看>>
网络访问的往返时间
查看>>
用Docker部署MariaDB
查看>>
java并发编程(四): 基础构建模块
查看>>
require异步加载vue组件可能导致的问题
查看>>
数据类型
查看>>
【Xcode】类名点击command找不到实现
查看>>
SwiftCommon之Cookie处理
查看>>
去掉a标签 点击之后的边框
查看>>
RabbitMQ消息队列的小伙伴: ProtoBuf(Google Protocol Buffer)
查看>>
SQL语言共分为四大类:
查看>>
nginx:413 Request Entity Too Large 及 修改 PHP上传文件大小配置
查看>>
java BigDecimal对象值比较笔记
查看>>