首页 > 代码库 > IOS - 回调函数的使用
IOS - 回调函数的使用
在 IOS 的数据回调或者说代理模式大都都是通过回调函数或者Block(代码块)来实现的,Block 没什么好讲的,语法而已,这里简单理解下回调函数的工作原理。
(这个回调函数的工作原理实际上的也是代理模式的过程)
一、代理类的实现
首先,新建一个代理类,并在其中写一个协议:AgencyProtocol
@protocol AgencyProtocol <NSObject>- (void)cometrueSuccess:(NSString *)str;- (void)cometrueFail:(NSString *)str;@end
然后在代理类中操作:
- 引入 AgencyProtocol 协议,并且定义一个AgencyProtocol协议的代理(delegate);
- 对该代理类使用单例模式(一般代理类使用单例模式比较好,可以防止内存泄露);
- 实现一个代理方法;
.h 文件代码:
@protocol AgencyProtocol;@interface AgencyClass : NSObject@property (nonatomic, weak) id<AgencyProtocol> delegate;// 单例模式+ (id)shareInstance;/** * 模拟代理方法 * * @param str 表示传进来的参数 * @param isBool 模拟判断是否执行成功:即调用协议中的哪个方法 */- (void)agencyFunction:(NSString *)str andBool:(BOOL)isBool;@end
.m 文件代码:(这里的代理实现是 回调函数 最重要的地方)
@implementation AgencyClass#pragma mark - 单例模式static AgencyClass *instnce;+ (id)shareInstance { if (instnce == nil) { instnce = [[[self class] alloc] init]; } return instnce;}#pragma mark - 代理实现- (void)agencyFunction:(NSString *)str andBool:(BOOL)isBool { if (isBool) { // 调用 respondsToSelector 方法判断 cometrueSuccess 是否被实现,如果没有实现就去实现它 if ([self.delegate respondsToSelector:@selector(cometrueSuccess:)]) { [self.delegate cometrueSuccess:str]; } } else { // 调用 respondsToSelector 方法判断 cometrueFail 是否被实现,如果没有实现就去实现它 if ([self.delegate respondsToSelector:@selector(cometrueFail:)]) { [self.delegate cometrueFail:str]; } }}@end
二、使用类的实现
首先,我们在 .h 文件中引入该代理类,并且引入协议
#import "AgencyClass.h"@interface ViewController : UIViewController<AgencyProtocol>@end
然后我们可以在.m 文件中操作
- 创建一个代理类的对象;
- 将使用类赋给代理类的 delegate;
- 使用代理方法
//使用代理类 // 创建一个代理类的对象 AgencyClass *agency = [AgencyClass shareInstance]; // 将使用类赋给代理类的 delegate; agency.delegate = self; // 使用代理方法 [agency agencyFunction:@"真的在实现?" andBool:YES];
最后我们可以实现协议的两个方法
#pragma mark - AgencyProtocol 实现- (void)cometrueSuccess:(NSString *)str { NSLog(@"%@ 是的,操作成功了!",str);}- (void)cometrueFail:(NSString *)str { NSLog(@"%@ 抱歉,操作失败了",str);}
IOS - 回调函数的使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。