在Objective-C中,回调通常通过Block或Delegate模式实现。本文将介绍使用Block实现回调的简单示例。
示例:使用Block实现回调
我们将创建一个名为MyTask的类,该类将执行一个任务,并在完成后通过回调通知调用者。
步骤一:创建MyTask类
首先,创建一个名为MyTask.h的头文件:
#importtypedef void (^MyTaskCompletionHandler)(Boolean success); 然后,创建MyTask.m文件:
@interface MyTask @property (nonatomic, weak) id<MyTaskDelegate> delegate; -(void)executeTaskWithCompletionHandler:(MyTaskCompletionHandler)handler; @end @implementation MyTask -(void)executeTaskWithCompletionHandler:(MyTaskCompletionHandler)handler { // 执行任务... dispatch_after(dispatch_time_now() + 1.0, ^{ if (true) { [self.delegate myTaskDidComplete:self handler:handler]; } else { [self.delegate myTaskDidFail:self handler:handler]; } }, dispatch_get_main_queue()); } @end步骤二:创建Delegate类
创建一个Delegate类,实现MyTaskDelegate协议:
@interface MyTaskDelegate @protocol MyTaskDelegate -(void)myTaskDidComplete:(MyTask *)task handler:(MyTaskCompletionHandler)handler; -(void)myTaskDidFail:(MyTask *)task handler:(MyTaskCompletionHandler)handler; @end @implementation MyTaskDelegate -(void)myTaskDidComplete:(MyTask *)task handler:(MyTaskCompletionHandler)handler { // 处理成功情况... } -(void)myTaskDidFail:(MyTask *)task handler:(MyTaskCompletionHandler)handler { // 处理失败情况... } @end步骤三:使用MyTask类
在需要的地方创建MyTask实例,并设置Delegate:
MyTask *task = [[MyTask alloc] init]; task.delegate = self; [task executeTaskWithCompletionHandler:^{ // 处理完成或失败回调 }];在Delegate中实现相应的方法,根据任务状态调用回调。
通过上述步骤,我们成功实现了Objective-C中使用Block进行回调的示例。这种方法简洁高效,适用于需要在任务完成后进行异步处理的场景。