需求:ios通过delegate来实现类似java里面的接口回调功能
即:A对象调用B对象执行C任务,当C任务执行完毕后需要回调通知A对象。
task.h文件
#import <Foundation/Foundation.h>
@protocol TaskDelegate<NSObject>
@required
-(void) taskDoneCallback;
@end
@interface Task : NSObject
@property(nonatomic ,retain) id<TaskDelegate>delegate;
-(void)startTask;
@end
task.m文件
#import "Task.h"
@implementation Task
-(void)startTask{
NSLog(@"%s",__FUNCTION__);
[self performSelectorOnMainThread:@selector(doTask) withObject:self waitUntilDone:YES];
}
-(void)doTask{
NSLog(@"%s",__FUNCTION__);
sleep(3);
[self.delegate taskDoneCallback];
}
@end
taskworker.h文件
#import <Foundation/Foundation.h>
@interface TaskWorker : NSObject
-(void)doTask;
@end
taskworker.m文件
#import "TaskWorker.h"
#import "Task.h"
@interface TaskWorker() <TaskDelegate>
@end
@implementation TaskWorker
-(void)doTask{
NSLog(@"%s",__FUNCTION__);
Task *task = [[Task alloc]init];
task.delegate = self;
[task startTask];
}
-(void)taskDoneCallback{
NSLog(@"%s",__FUNCTION__);
}
@end
测试代码main.m:
#import <Foundation/Foundation.h>
#import "TaskWorker.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
TaskWorker *worker = [[TaskWorker alloc]init];
[worker doTask];
}
return 0;
}
demo下载:
https://github.com/Thinkerfans/oc-delegate-protocol-usedemo.git