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