【ios】关于 ios object-c delegate 委托

什么是委托

『领导想抽烟,让你帮忙去买包烟,所以你开车去超市买了一包烟』在这句话里面我们拆分下

  • 领导:委托发起者
  • 想抽烟:委托人想要做的
  • 买包烟:委托(协议 protocol)
  • 你: 被委托者
  • 开车去买烟 : 被委托者的具体实现方法

委托实现

定义协议

实现『烟』的协议,然后声明一个buy的方法

// cigarette.h
#import <Foundation/Foundation.h>
@protocol Cigarette <NSObject>
@required 
- (void) buy;
@end

委托发起人

定义『领导』类,并且领导要抽烟smoke方法

// leader.h
#import <Foundation/Foundation.h>
#import "cigarette.h"

@interface Leader:NSObject
@property id <Cigarette> delegate;
- (void) smoke;
@end

实现抽烟的具体逻辑,委托了一个人先去买,因为抽烟之前要先买啊

// leader.m
#import <Foundation/Foundation.h>
#import "leader.h"

@implementation Leader
- (void) smoke {
    [self.delegate buy];
}
@end 

被委托的人

『下属』的具体实现,领导的下属要遵循烟的协议,(不会买烟,还想当好下属)

// worker.h
#import <Foundation/Foundation.h>
#import "cigarette.h"

@interface Worker:NSObject <Cigarette>

@end 

『下属』知道了烟的协议,就需要知道买buy,并且要知道怎么去买

// worker.m
#import <Foundation/Foundation.h>
#import "worker.h"

@implementation Worker
- (void) buy {
    NSLog(@"worker drive a car to buy a cigarette");
}
@end 

发起委托

好,现在领导想抽烟了,[leader smoke]我们发现, leader 只会发起smoke ,并不关心烟从哪儿来的具体逻辑实现。

// main.m
#import <Foundation/Foundation.h>
#import "leader.h"
#import "worker.h"

int main() {
    @autoreleasepool {
        Leader *leader = [Leader new];
        Worker *worker = [Worker new];
        // 指定一个被委托者
        leader.delegate = worker;
        // 发起抽烟,具体逻辑被实现
        [leader smoke];
        
    }
    
    return 0;
}
    原文作者:jaysun
    原文地址: https://segmentfault.com/a/1190000010884979
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞