定义一套接口,某对象若想接受另一个对象的委托,则需要遵循此接口,以便成为其 "委托对象”。而这 ”另一个对象“ 则给其委托对象回传一些信息,也可以在发生相关时间时通知委托对象。

类似于 我们找黄牛帮我们买票

简单实现

结构中 Buy 是一个 协议

// main.m
#import "XiaoMing.h"

@implementation XiaoMing

- (void)buyTickets{
    NSLog(@"xiaoming buy tickets");
}
@end

// Dahua.h
#import <Foundation/Foundation.h>
#import "Buy.h"
NS_ASSUME_NONNULL_BEGIN

@interface DaHua : NSObject
// 设置代理人
@property (nonatomic, weak) id<Buy> delegate;

- (void) letXiaoMingBuy;

@end

NS_ASSUME_NONNULL_END

// DaHua.m
#import "DaHua.h"

@implementation DaHua

- (void)letXiaoMingBuy{
    [self.delegate buyTickets];
}

@end

// XiaoMing.h
#import <Foundation/Foundation.h>
#import "Buy.h"

NS_ASSUME_NONNULL_BEGIN

// 委托对象
@interface XiaoMing : NSObject <Buy>	

@end

NS_ASSUME_NONNULL_END

// XiaoMing.m
#import "XiaoMing.h"

@implementation XiaoMing

- (void)buyTickets{
    NSLog(@"xiaoming buy tickets");
}
@end

// Buy.h
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@protocol Buy <NSObject>

// 委托的方法
- (void)buyTickets;

@end

NS_ASSUME_NONNULL_END

方法为

  1. 定义委托方法,
  2. 创建委托对象,委托对象实现委托协议
  3. 在另一个类声明委托对象,和触发委托对象方法

为了保证有 对应的委托方法,

我们需要加一个动态判断

// DaHua.m
#import "DaHua.h"

@implementation DaHua

- (void)letXiaoMingBuy{
    if([self.delegate respondsToSelector:@selector(buyTickets)]){
        [self.delegate buyTickets];
    }
}

@end