彻底理解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)-简书
- 协议