block 应用说明
一、Block定义
Block可以理解为一个函数指针(即它是一个指针,指向某个函数)
returnType (^blockName) (parameter list) = ^ (parameter list) {代码块};
//returnType:block的返回类型,可定义为void;
//blockName:block的命名,可根据不同的变量/函数命名规范进行命名;
//parameter list:block形参类型定义,可传入多个值,也可没有参数;
举例说明:
//定义无参无返回值的Block
void (^printBlock)() = ^(){
printf("no number");
};
printBlock(); void (^myBlock)(NSString *); //block 声明 - (void)viewDidLoad
{
//block 在代码中的实现
myBlock = ^(NSString *text){
NSLog(@"my text = %@", text);
};
//调用block函数的实现
int nCount = myCount(, );
NSLog(@"count = %zi", nCount);
} //block函数原型定义
int (^myCount)(int a, int b) = ^(int a, int b)
{
return a+b;
};
二、Block作为函数参数传递
returnType (^blockName) (parameter list)
//returnType:block的返回类型,可定义为void;
//blockName:block的命名,可根据不同的变量/函数命名规范进行命名;
//parameter list:block形参类型定义,可传入多个值,也可没有参数;
实际声明方式:
+ (void)updateImage:(void(^)(NSInteger status,NSDictionary *res))block; //变更网络请求方式
-(void)ModifyRequestMode:(void(^)())block
{
//取消所有任务,放到全局队列中优先级最高
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, ), ^{
ZLBAFHTTPClient *httpClient = [ZLBAFHTTPClient shareClient];
//取消队列中的所有网络请求任务
[httpClient cancelAllTasks];
//取消队列中所有任务
[httpClient.workQueue cancelAllOperations];
//重新匹配正确的CDN节点
[[ZLBGlobal sharedGlobal] changeNetwork:^{
block();
}];
});
} - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock completed:(void (^)(void))completedBlock {
NSCParameterAssert(nextBlock != NULL);
NSCParameterAssert(completedBlock != NULL); RACSubscriber *o = [RACSubscriber subscriberWithNext:nextBlock error:NULL completed:completedBlock];
return [self subscribe:o];
}
实现简单的相应是block函数:
@property(nonatomic, strong) RACSubject *subject; self.subject = [RACSubject subject]; //初始化信号 //响应式block回调
-(void)finishModel:(void(^)(void))block{
//接收到信号后,返回block
[self.subject subscribeNext:^(id _Nullable x) {
return block();
}];
} //动画结束后,发送完成信号
[UIView animateWithDuration:animalDuration animations:^{
self.alphView.alpha = 0.0;
self.bkView.frame = CGRectMake(, kMainBoundsHeight, kMainBoundsWidth, );
[self.imageView mas_updateConstraints:^(MASConstraintMaker *make) {
make.width.height.offset();
}];
[self layoutIfNeeded];
} completion:^(BOOL finished) {
[self.imageView stopAnimating];
[self removeFromSuperview];
[self.subject sendNext:@]; //发送信号
}]; //代码实现
[_showView finishModel:^{
NSLog(@"close show");
}];
block 应用说明的更多相关文章
- Objective-C中block的底层原理
先出2个考题: 1. 上面打印的是几,captureNum2 出去作用域后是否被销毁?为什么? 同样类型的题目: 问:打印的数字为多少? 有人会回答:mutArray是captureObject方法的 ...
- iOS 键盘添加完成按钮,delegate和block回调
这个是一个比较初级一点的文章,新人可以看看.当然实现这个需求的时候自己也有一点收获,记下来吧. 前两天产品要求在工程的所有数字键盘弹出时,上面带一个小帽子,上面安装一个“完成”按钮,这个完成按钮也没有 ...
- python中IndentationError: expected an indented block错误的解决方法
IndentationError: expected an indented block 翻译为IndentationError:预期的缩进块 解决方法:有冒号的下一行要缩进,该缩进就缩进
- JDBC Tutorials: Commit or Rollback transaction in finally block
http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...
- 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比
C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...
- 嵌入式&iOS:回调函数(C)与block(OC)回调对比
学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...
- Block解析(iOS)
1. 操作系统中的栈和堆 我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方 ...
- CSS学习笔记——包含块 containing block
以下内容翻译自CSS 2.1官方文档.网址:https://www.w3.org/TR/CSS2/visudet.html#strut 有时,一个元素的盒子的位置和尺寸根据一个确定的矩形计算,这个确定 ...
- 用block做事件回调来简化代码,提高开发效率
我们在自定义view的时候,通常要考虑view的封装复用,所以如何把view的事件回调给Controller就是个需要好好考虑的问题, 一般来说,可选的方式主要有target-action和de ...
- 关于多个block问题
在某个添加文本的页面中,leftbarbutton是删除(直接将数组中的这个string删除),rightbarbutton是完成,分别对应两个block,完成的block是一开始写的,写到了view ...
随机推荐
- mtk lk阶段的lcm流程
一.lk进入kmain() 1. vendor/mediatek/proprietary/bootable/bootloader/lk/arch/arm/srt0.S bl kmain 二.初始化lk ...
- 修改Linux内核参数提高Nginx服务器在高的时候的性能
并发 Linux下高并发的Nginx服务器,当TCP TIME_WAIT套接字数量经常达到两.三万,服务器很容易被拖死.通过修改Linux内核参数,可以减少Nginx服务器的TIME_WAIT套接字数 ...
- <正则吃饺子> :关于前端往后端传递布尔值参数的问题
问题是在一个群里看到的,通过自己查找和实验,参考网上的博文,将问题列出来.以帮助后来者和共同交流学习. 博文地址:http://blog.sina.com.cn/s/blog_13c30757a0 ...
- 华为CodeCraft2018 周进展
上周: python验证lstm,效果不好.很多拟合的是直线.C++抄了个lstm,输出也是直线,不知道是程序的问题,还是模型的问题. 尝试bp神经网络求解.代码是抄的.回看天数是写死的,隐层只有一层 ...
- windows下mysql5.1忘记root密码解决方法[win7]
步骤如下:1.停止mysql服务(以管理员身份,在cmd命令行下运行) net stop mysql2.使用 mysqld –skip-grant-tables 命令启动mysql数据库 D:\> ...
- g2o使用bug总结
g2o进行3d2d优化的时候,设置优化图的边时,注意setVertex()中顶点的顺序. void setVertex(size_t i, Vertex* v) { assert(i < _ve ...
- python 之enumerate函数
对于一个seq,得到: (0, seq[0]), (1, seq[1]), (2, seq[2]) list1 = ["这", "是", "一个&qu ...
- Several ports (8005, 8080, 8009) required
Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...
- POJ 3262 Protecting the Flowers 贪心(性价比)
Protecting the Flowers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7812 Accepted: ...
- eclipse + tomcat 开发环境配置
一. 下载tomcat和Eclipse 下载tomcat 下载地址:http://tomcat.apache.org/download-70.cgi 下载后解压如下图 下载eclipse 下载地址:h ...