一、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 应用说明的更多相关文章

  1. Objective-C中block的底层原理

    先出2个考题: 1. 上面打印的是几,captureNum2 出去作用域后是否被销毁?为什么? 同样类型的题目: 问:打印的数字为多少? 有人会回答:mutArray是captureObject方法的 ...

  2. iOS 键盘添加完成按钮,delegate和block回调

    这个是一个比较初级一点的文章,新人可以看看.当然实现这个需求的时候自己也有一点收获,记下来吧. 前两天产品要求在工程的所有数字键盘弹出时,上面带一个小帽子,上面安装一个“完成”按钮,这个完成按钮也没有 ...

  3. python中IndentationError: expected an indented block错误的解决方法

    IndentationError: expected an indented block 翻译为IndentationError:预期的缩进块 解决方法:有冒号的下一行要缩进,该缩进就缩进

  4. JDBC Tutorials: Commit or Rollback transaction in finally block

    http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...

  5. 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

    C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...

  6. 嵌入式&iOS:回调函数(C)与block(OC)回调对比

    学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...

  7. Block解析(iOS)

    1. 操作系统中的栈和堆 我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方 ...

  8. CSS学习笔记——包含块 containing block

    以下内容翻译自CSS 2.1官方文档.网址:https://www.w3.org/TR/CSS2/visudet.html#strut 有时,一个元素的盒子的位置和尺寸根据一个确定的矩形计算,这个确定 ...

  9. 用block做事件回调来简化代码,提高开发效率

       我们在自定义view的时候,通常要考虑view的封装复用,所以如何把view的事件回调给Controller就是个需要好好考虑的问题, 一般来说,可选的方式主要有target-action和de ...

  10. 关于多个block问题

    在某个添加文本的页面中,leftbarbutton是删除(直接将数组中的这个string删除),rightbarbutton是完成,分别对应两个block,完成的block是一开始写的,写到了view ...

随机推荐

  1. ubuntu bcompare 安装

    Terminal Install wget http://www.scootersoftware.com/bcompare-4.2.8.23479_amd64.deb sudo apt-get upd ...

  2. APIO2015巴厘岛的雕塑——数位DP

    题目:https://www.luogu.org/problemnew/show/P3646 对于A>1,将答案各位全置1,然后从高位到低位改成0判断是否可行: 用f[i][j]数组代表前i个数 ...

  3. C# 获取点击列的索引

    datagridview 怎么获取选中行的某一列的索引比如 下面是表学号 姓名 所在年级 1    张     高一 2    李     高二当我选择第二行的时候 我想取所在年级的列索引 这时候那个 ...

  4. Struts过滤器

    StrutsPrepareAndExecuteFilter过滤器其实是包含2部分的 StrutsPrepareFilter:做准备 StrutsExecuteFilter:进入Struts2的核心处理 ...

  5. 多线程之----定时器TIMER

    结上一篇  多线程的简单介绍  http://www.cnblogs.com/duanxiaojun/p/6595847.html 在上一讲中我主要是对多线程学习这个系列做了一个大致的学习计划,然后对 ...

  6. SetConsoleCtrlHandler() -- 设置控制台信号处理函数

    http://www.groad.net/bbs/thread-8253-1-1.html 当你在命令行里工作时,经常会输入 Ctrl-C 这个组合键以停止程序的运行.SetConsoleCtrlHa ...

  7. Flutter实战视频-移动电商-32.列表页_小类高亮交互效果制作

    32.列表页_小类高亮交互效果制作 点击大类右侧的横向的小类红色显示当前的小类别 解决之前溢出的问题: 先解决一个bug,之前右侧的这里设置的高度是1000,但是有不同的虚拟机和手机设别的问题造成了溢 ...

  8. shell初级-----更多结构化命令

    for命令 bash shell提供了for命令,允许你创建一个遍历一系列的循环. for var in list do commands done 1.读取列表中的值 for命令最基本的用法就是遍历 ...

  9. Weekly Contest 111-------->941. Valid Mountain Array(max_element)

    Given an array A of integers, return true if and only if it is a valid mountain array. Recall that A ...

  10. CSS优先级、CSS选择器、编写CSS时的注意事项

    CSS的优先级: 内嵌样式>ID选择器>类选择器>标签选择器 内部样式>内部样式>外部样式 CSS的选择器: 选择器:在 CSS 中,选择器是一种模式,用于选择需要添加样 ...