OC - 委托(Delegates)

OC - 委托(Delegates) 首页 / iOS入门教程 / OC - 委托(Delegates)

假设对象A调用对象B来执行操作,动作完成后,对象A应知道B已完成任务并采取必要的措施,这是在代表的帮助下实现的。

上面示例中的关键概念是-

  • A是B的委托对象。

  • B将引用A。

  • A将实现B的委托方法。

  • B将通过委托方法通知A。

创建步骤

第1步 - 首先,创建一个单视图应用程序。

第2步 - 然后选择File→New→File...

iOS Tutorial

第3步 - 然后选择" Objective C Class",然后单击" Next"。

第4步 - 为该类命名,如SampleProtocol,其子类为NSObject,如下所示。

iOS Tutorial

第5步 - 然后选择创建。

无涯教程网

第6步 - 将协议添加到SampleProtocol.h文件,更新后的代码如下-

#import <Foundation/Foundation.h>

//协议定义从这里开始
@protocol SampleProtocolDelegate <NSObject>
@required
- (void) processCompleted;
@end

//协议定义到此结束
@interface SampleProtocol : NSObject {
   //Delegate to respond back
   id <SampleProtocolDelegate> _delegate; 
}
@property (nonatomicstrong) id delegate;

-(void)startSampleProcess; //实例方法
@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。

iOS Tutorial

 第9步 - 为标签创建一个IBOutlet,并将其命名为myLabel,并按如下所示更新代码以在ViewController.h中采用SampleProtocolDelegate。

#import <UIKit/UIKit.h>
#import "SampleProtocol.h"

@interface ViewController : UIViewController<SampleProtocolDelegate> {
   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];
   //在加载视图后进行任何额外的设置,通常是从一个 nib 开始。
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   //处置任何可以重新创建的资源。
}

#pragma mark - Sample protocol delegate
-(void)processCompleted {
   [myLabel setText:@"Process Completed"];
}
@end

第11步  - 无涯教程将看到如下输出。最初,标签显示"Processing...",一旦SampleProtocol对象调用了委托方法,该标签就会更新。

iOS Tutorial

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

算法面试通关40讲 -〔覃超〕

从0打造音视频直播系统 -〔李超〕

即时消息技术剖析与实战 -〔袁武林〕

苏杰的产品创新课 -〔苏杰〕

人人都能学会的编程入门课 -〔胡光〕

Redis核心技术与实战 -〔蒋德钧〕

分布式金融架构课 -〔任杰〕

零基础入门Spark -〔吴磊〕

互联网人的数字化企业生存指南 -〔沈欣〕

好记忆不如烂笔头。留下您的足迹吧 :)