事实上。iOS中的Block就是C++中的函数指针,实现方式都是一样的,以下贴出一个简单的实践。

首先,创建一个回调的类

BlockStudy.h

  1. //
  2. // BlockStudy.h
  3. // BlockStudy
  4. //
  5. // Created by 杜甲 on 11/11/14.
  6. // Copyright (c) 2014 杜甲. All rights reserved.
  7. //
  8.  
  9. #import <Foundation/Foundation.h>
  10.  
  11. @interface BlockStudy : NSObject
  12.  
  13. typedef void (^TestBlock)();
  14. @property (nonatomic , strong) TestBlock testBlock;
  15.  
  16. - (void)StartBlock;
  17. @end

BlockStudy.m

  1. //
  2. // BlockStudy.m
  3. // BlockStudy
  4. //
  5. // Created by 杜甲 on 11/11/14.
  6. // Copyright (c) 2014 杜甲. All rights reserved.
  7. //
  8.  
  9. #import "BlockStudy.h"
  10.  
  11. @implementation BlockStudy
  12.  
  13. - (void)test
  14. {
  15. if (_testBlock) {
  16. _testBlock();
  17. }
  18. }
  19.  
  20. - (void)StartBlock
  21. {
  22. [self performSelector:@selector(test) withObject:nil afterDelay:2.0];
  23. }
  24.  
  25. @end

调用类ViewController.m

  1. //
  2. // ViewController.m
  3. // BlockStudy
  4. //
  5. // Created by 杜甲 on 11/11/14.
  6. // Copyright (c) 2014 杜甲. All rights reserved.
  7. //
  8.  
  9. #import "ViewController.h"
  10. #import "BlockStudy.h"
  11.  
  12. @interface ViewController ()
  13.  
  14. @end
  15.  
  16. @implementation ViewController
  17.  
  18. - (void)viewDidLoad {
  19. [super viewDidLoad];
  20. // Do any additional setup after loading the view, typically from a nib.
  21. BlockStudy *block = [[BlockStudy alloc] init];
  22. block.testBlock = ^()
  23. {
  24. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Block学习" message:@"測试成功" delegate:self cancelButtonTitle:@"取消吧" otherButtonTitles:@"OK", nil];
  25. [alert show];
  26.  
  27. };
  28. [block StartBlock];
  29. }
  30.  
  31. - (void)didReceiveMemoryWarning {
  32. [super didReceiveMemoryWarning];
  33. // Dispose of any resources that can be recreated.
  34. }
  35.  
  36. @end

iOS 使用Block实现函数回调的更多相关文章

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

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

  2. iOS开发--Block

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

  3. iOS开发——Block详解

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

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

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

  5. iOS中Block的用法,举例,解析与底层原理(这可能是最详细的Block解析)

    1. 前言 Block:带有自动变量(局部变量)的匿名函数.它是C语言的扩充功能.之所以是拓展,是因为C语言不允许存在这样匿名函数. 1.1 匿名函数 匿名函数是指不带函数名称函数.C语言中,函数是怎 ...

  6. IOS开发 Block的学习

    苹果公司正在大力推广Block块语法的使用,据说Block会迟早取代一般协议代理的使用. Block最大的作用是函数回调,简化代码. 在ios中,将blocks当成对象来处理,它封装了一段代码,这段代 ...

  7. ios开发 block语句块

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

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

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

  9. iOS中Block介绍 基础

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

随机推荐

  1. Vmware中Ubuntu挂ISO到虚拟光驱

    Ubuntu 下挂ISO到虚拟光驱的方法 https://i.cnblogs.com/EditPosts.aspx?opt=1 如果要ubuntu找到rpm软件包,需要把iso挂载到/media/cd ...

  2. Mac Yosemite下Android Studio环境问题集合

    1. java not found 在mac Yosemite下,因jre升级到1.8,导致Android Studio无法启动.报错:"JAVA not found". 解决方法 ...

  3. hdu 2841 Visible Trees

    /** 大意: 求[1,m], [1,n] 之间有多少个数互素...做了 1695 ,,这题就so easy 了 **/ #include <iostream> #include < ...

  4. 字符串操作函数<string.h>相关函数strcpy,strcat,等源码。

    首先说一下源码到底在哪里找. 我们在文件中包含<cstring>时,如果点击右键打开文档, 会打开cstring,我们会发现路径为: D:\Program Files\visual stu ...

  5. 异步和同步http请求超时机制

    异步超时设置: 例子: Example: do a simple HTTP GET request for http://www.nethype.de/ and print the response ...

  6. HNOI2016 网络

    题目 朴素算法 在线. 树链剖分套一个堆. 时间复杂度\(O(n (\log n)^3)\). 分治 朴素算法中,套一个堆是为了支持删除操作. 采用以下分治可以避免删除操作: 每次对时间\([l,r] ...

  7. Arcgis for javascript map操作addLayer具体解释

    本节的内容非常easy.说说Arcgis for Javascript里面map对象的addLayer方法.在for JS的API中,addLayer方法有两种.例如以下图: watermark/2/ ...

  8. 【Hibernate】Illegal attempt to associate a collection with two open sessions

    今天在用Hibernate对对象进行修改操作的时候报了这个错. 之前一直没什么错误,但是今天修改了一下表结构,增加了一个OneToMany的映射. 所以在我获取对象,重新set一个变量之后就报了这个错 ...

  9. ITextSharp 初次接触

    官网:http://www.itextpdf.com/  (英文好的建议看这里) 下面我就对itextsharp做一个初步的介绍,并把最近封装的一个用于生成pdf的类库提供给需要的朋友,对于大神你可以 ...

  10. PHP学习笔记6-时间/日期

    时区/时间/日期 输出unix时间戳(从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数),用time() echo time();//unix时间戳 输出结果:143557475 ...