美文网首页
iOS 代理模式

iOS 代理模式

作者: 印林泉 | 来源:发表于2017-03-02 19:02 被阅读45次
    • 代理模式
      确定委托方和代理者。由委托方制定协议、规范接口。让任意类型的遵守协议的代理方设置为委托方需要的代理者,代理方遵守协议、实现协议方法。委托方正确地设置代理,建立委托方和代理者关联。委托方决定代理调用某个方法的时机。

    • 应用,适用场景
      老板叫老王买木头。

    委托方(老板)

    //
    //  Boss.h
    //  LearnDelegate
    //
    //  Created by 印林泉 on 2017/3/2.
    //  Copyright © 2017年 yiq. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @protocol BossDelegate <NSObject>
    
    - (void)buyWood;
    
    @end
    
    @interface Boss : NSObject
    
    @property (nonatomic, strong) id<BossDelegate> delegate;
    
    - (void)sendCommand;
    
    @end
    
    //
    //  Boss.m
    //  LearnDelegate
    //
    //  Created by 印林泉 on 2017/3/2.
    //  Copyright © 2017年 yiq. All rights reserved.
    //
    
    #import "Boss.h"
    
    @implementation Boss
    
    - (void)sendCommand {
        NSLog(@"send command");
        [self.delegate buyWood];
    }
    
    @end
    

    代理者(老王)

    //
    //  Worker.h
    //  LearnDelegate
    //
    //  Created by 印林泉 on 2017/3/2.
    //  Copyright © 2017年 yiq. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "Boss.h"
    
    @interface Worker : NSObject<BossDelegate>
    
    @end
    
    //
    //  Worker.m
    //  LearnDelegate
    //
    //  Created by 印林泉 on 2017/3/2.
    //  Copyright © 2017年 yiq. All rights reserved.
    //
    
    #import "Worker.h"
    
    @implementation Worker
    
    - (void)buyWood {
        NSLog(@"buy wood");
    }
    @end
    

    设置代理(老板买木头)

    //
    //  ViewController.m
    //  LearnDelegate
    //
    //  Created by 印林泉 on 2017/3/2.
    //  Copyright © 2017年 yiq. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "Boss.h"
    #import "Worker.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        Worker *worker = [[Worker alloc] init];
        Boss *boss = [[Boss alloc] init];
        [boss setDelegate:worker];
        [boss sendCommand];
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    

    不用关心代理者,遵守协议就与委托方建立关联。通过协议建立通信。

    相关文章

      网友评论

          本文标题:iOS 代理模式

          本文链接:https://www.haomeiwen.com/subject/jzjkgttx.html