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

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

技术教程推荐

从0开始做增长 -〔刘津〕

Java业务开发常见错误100例 -〔朱晔〕

Serverless入门课 -〔蒲松洋(秦粤)〕

程序员的测试课 -〔郑晔〕

全链路压测实战30讲 -〔高楼〕

Spring Cloud 微服务项目实战 -〔姚秋辰(姚半仙)〕

大厂广告产品心法 -〔郭谊〕

人人都用得上的数字化思维课 -〔付晓岩〕

Kubernetes入门实战课 -〔罗剑锋〕

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