📅  最后修改于: 2020-12-08 06:18:45             🧑  作者: Mango
假设对象A调用对象B来执行操作。动作完成后,对象A应知道B已完成任务并采取必要的措施。这是在代表的帮助下实现的。
上面示例中的关键概念是-
A是B的委托对象。
B将引用A。
A将实现B的委托方法。
B将通过委托方法通知A。
步骤1-首先,创建一个单视图应用程序。
步骤2-然后选择文件→新建→文件…
步骤3-然后选择Objective C Class,然后单击Next。
步骤4-为该类命名,例如SampleProtocol,其子类为NSObject,如下所示。
步骤5-然后选择创建。
步骤6-将协议添加到SampleProtocol.h文件,更新的代码如下-
#import
// Protocol definition starts here
@protocol SampleProtocolDelegate
@required
- (void) processCompleted;
@end
// Protocol Definition ends here
@interface SampleProtocol : NSObject {
// Delegate to respond back
id _delegate;
}
@property (nonatomic,strong) id delegate;
-(void)startSampleProcess; // Instance method
@end
步骤7-通过更新SampleProtocol.m文件来实现实例方法,如下所示。
#import "SampleProtocol.h"
@implementation SampleProtocol
-(void)startSampleProcess {
[NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate
selector:@selector(processCompleted) userInfo:nil repeats:NO];
}
@end
步骤8-如下所示,通过将标签从对象库拖动到UIView,在ViewController.xib中添加UILabel。
步骤9-为标签创建一个IBOutlet,并将其命名为myLabel,并按如下所示更新代码以在ViewController.h中采用SampleProtocolDelegate。
#import
#import "SampleProtocol.h"
@interface ViewController : UIViewController {
IBOutlet UILabel *myLabel;
}
@end
步骤10实现委托方法,为SampleProtocol创建对象,然后调用startSampleProcess方法。更新的ViewController.m文件如下-
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
SampleProtocol *sampleProtocol = [[SampleProtocol alloc]init];
sampleProtocol.delegate = self;
[myLabel setText:@"Processing..."];
[sampleProtocol startSampleProcess];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Sample protocol delegate
-(void)processCompleted {
[myLabel setText:@"Process Completed"];
}
@end
步骤11我们将看到如下输出。最初,标签显示“正在处理…”,一旦SampleProtocol对象调用了委托方法,该标签就会更新。