彻底理解OC协议protocol



  • protocol

    首先明白代理和协议的关系:

    用一个简单的例子来说明,比如说导演A现在忙不过来,需要有人给他做翻译,他就写了一份协议P,一位学生B具备给A做翻译的能力,他就可以来应聘成为A的翻译(代理)

    • 协议 protocol 规定代理人(类)需要具备的能力
    • 代理 delegate 具备协议规定能力的人(类)

    示例伪代码

    • filmAssistantProtocol.h 定义协议内容
    • Director.h 定义一个导演,他需要一个翻译助手,具体的能力要求就是上面的协议
    • transferGirl.h 定义一个女生可以满足上面导演的翻译要求

    filmAssistantProtocol.h

    @protocol filmAssistantProtocol
    //必须具备的能力(function)
    @required 
    +(void) languageTrans;
    //可有可无的能力(function)
    @optional
    +(void) communicate;
    @end
    

    Director.h

    #import <Foundation/Foundation.h>
    #import "filmAssistantProtocol.h"
    
    @interface Director :NSObject 
    
    @property (strong, nonatomic) NSString *directorName;//定义导演的名字
    //
    
    /*定义一个后期制作的代理 backAssistant,这个代理遵守 filmAssistantProtocol 这个
    协议,即:这个后期制作的代理 应该能干filmAssistantProtocol 这个协议里面定义的
    功能集合
     
    与通常我们见到的 
     @property(nonatomic, retain)  id <someProtocol>        delegate; 写法其实是一回事.
                                          |                   |
                                          |                   |
                                          V                   V
     @property(nonatomic, retain)  id<filmAssistantProtocol> backAssistant;
    
    */
    
    @property(nonatomic, retain) id<filmAssistantProtocol> transfer;//定义一个需要的翻译代理
    -(void) posterMake;
    -(void) introMyself;
    @end
    

    transferGirl.h

    #import <Foundation/Foundation.h>
    #import "filmAssistantProtocol.h"
    @interface transferGirl : NSObject<filmAssistantProtocol>//实现了filmAssistantProtocol协议
    @property (strong, nonatomic) NSString *name;
    -(void) transfer;
    @end
    

    至于怎么把三者联系起来就不需要赘述了,简单地说就是初始化然后赋值。

    感谢简书原博主的启发,原博链接彻底理解Objective-C 协议(protocol),代理(delegate)-简书


 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待