iOS中什么是BLOCK回调函数

1、回调函数类似通知、委托

2、回调函数声明、实现、回调可以在都一个类中,也可以把回调写到别的类中

3、在A类中声明函数,在实现函数中,达到满足的条件,回调,在B类中的回调函数会被调用,并去处理满足条件的事情

比如下载,如果下载完成,就触发回调函数,通知B类中的回调函数,传递一个下载完成的参数,B类的回调函数会根据参数       执行相应的代码,如果成功怎么样怎么样,如果失败怎么样怎么样,B类在A类下载过程中完全可以做他自己的事情。

4、例子(伪代码):

A类a.h中声明

-(void)downloadFile:(NSString *)url withStatus:(void(^)(BOOL status))isFileDownloaded;

url给downloadFile下载提供的url参数,这个应该没疑问吧,就是普通函数的参数,后面的withStatus是一个回调函数,后面我们实现以及被回调的时候看下是怎么写这个参数的,void(^)(BOOL status) 是修饰回调函数isDownloaded的,记住是修饰回调函数的,void(^)声明这个这个回调函数不需要返回值,BOOL status声明回调函数的参数是一个BOOL型的参数status,告诉B类的回调函数,我到底是下载成功还是失败了.

A类a.m中实现

-(void)downloadFile:(NSString *)url withStatus:(void (^)(BOOL))isFileDownloaded{
    //根据url下载文件
    ...
    
    if(downloaded){
    //如果下载成功,触发回调函数,传YES参数
        isFileDownloaded(YES);
    } else {
    //如果下载失败,触发回调函数,传NO参数
        isFileDownloaded(NO);
    }    
}

B类b.m中

我们来写回调函数,到这里应该都能理解了,B类中的回调函数,就是下载完成后被调用的。

[self downloadFile:@"http://xxx.com/xxx.dmg" withStatus:<#^(BOOL status)isFileDownloaded#>];

<#^(BOOL stateus)isFileDownloaded#>

上面回车展开

[self downloadFile:@"ddd" withStatus:^(BOOL status) {
        if(status){
            ...
        } else {
            ...
        }
    }];

在函数里面判断status是YES还是NO,来处理不同的结果!

时间: 2024-10-02 14:20:29

iOS中什么是BLOCK回调函数的相关文章

[转]iOS中ARC下Block的循环引用

[ARC的特性] ARC下,所有NSObject类型指针, 1. 默认为__strong类型 2. 可以显示的指定为__weak类型,__weak类型指针在所指向对象销毁后会自动置为nil 3. __autorelesing类型用于inout参数类型 ARC下,当一个函数返回一个NSObject指针时,编译器会帮我们实现autorelease调用.例如: return pObject; 编译器会帮我们扩展为 return [pObject autorelease]; ARC下,不能显式relea

PHP – 在类中使用array_filter时回调函数的问题

了一个类处理好友,其中有一个方法用来同步好友,而这个方法中需要从微博传来的关注列表和粉丝列表中,找到互相关注的用户,记录一下经验,主要还是关于回调函数. 按照我最初的理解,这样写就可以了 private function getMutualFromSina ($focusList) { return array_filter($focusList, "filterSinaList"); } private function filterSinaList ($value) { retur

iOS中的round/ceil/floorf函数略解

extern float ceilf(float); extern double ceil(double); extern long double ceill(long double); extern float floorf(float); extern double floor(double); extern long double floorl(longdouble); extern float roundf(float); extern double round(double); ext

IOS中标签视图和Block

标签视图控制器 - UITabBarController 自定义UITabBarItem 自定义导航栏和标签栏背景图片 三个视图控制器的综合使用 一. 标签视图控制器  UITabBarController UITabBarController有以下重要属性 viewControllers   显示的视图控制器 tabBar                  标签栏 delegate                协议 tabBar 是 UITabBar对象, 包含多个UITabBarItem,

C语言中的回调函数(Callback Function)

1 定义和使用场合 回调函数是指 使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数.函数是你实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数.简单来说,就是由别人的函数运行期间来回调你实现的函数. 这一设计允许了底层代码调用在高层定义的子程序(如图1-1所示).C语言中回调函数主要通过函数指针的方式实现. 图1-1 回调函数在软件系统的调用结果 回调的用途十

java中回调函数的理解

不要忽律学习中的一点点细节,也许他会决定你的成败. 这是在c/c++中的定义: 回调函数就是一个通过函数指针(函数地址)调用的函数.如果把函数的指针(也即函数的地址)作为参数传递给另一个函数,当通过这个指针调用它所指向的函数时,称为函数的回调. 回调函数不是由该函数的实现方直接调用的,而是在特定的事件或条件发生时,由另外的一方调用的,用于对该事件或条件进行响应. 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类: 同步调用.回调和异步调用. 同步调用是一种阻塞式调用,调用方要等

wx: wx.showModal 回调函数中调用自定义方法

一.在回调函数中调用自定义方法: 回调函数中不能直接使用this,需要在外面定义 var that = this 然后 that.自定义的方法.如下: //删除 onDelete: function (e) { var that = this; wx.showModal({ title: '提示', content: '确定要删除?', success: function (res) { if (res.confirm) { that.onEdit(e); } } }) }, //编辑 onEd

创建回调函数

1.新建一个空的project,在project中随便创建一个类,比方: .h文件 #import <UIKit/UIKit.h> typedef void(^resultBlock)(void); @interface MyView : UIView //回调函数的声明 @property (assign, nonatomic)resultBlock block; //回调函数的实如今调用端实现 - (void)doSomething:(NSString *)string withTheBl

Python 3 进程池与回调函数

Python 3 进程池与回调函数 一.进程池 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.多进程是实现并发的手段之一,需要注意的问题是: 很明显需要并发执行的任务通常要远大于核数 一个操作系统不可能无限开启进程,通常有几个核就开几个进程 进程开启过多,效率反而会下降(开启进程是需要占用系统资源的,而且开启多余核数目的进程也无法做到并行) 例如当被操作对象数目不大时,可以直接利用multiprocessing中的Proces