OC学习笔记11--protocol使用方法及注意事项
来源:互联网 发布:html5动画源码 编辑:程序博客网 时间:2024/06/05 03:53
#import <Foundation/Foundation.h>// ProtocolA comply with root protocol@protocol ProtocolA <NSObject>// 返回值为遵守了ProtocolA的对象- (NSObject<ProtocolA> *)getSelf;@end// ProtocolB comply with ProtocolA@protocol ProtocolB <ProtocolA>@required // 以下方法需要实现+ (id)getSelfClass;- (Class)getSelfClass;@end@protocol ProtocolC <NSObject>@optional // 以下方法选择性实现- (void)methodC;@end// ClassA comply with ProtocolB and ProtocolC@interface ClassA :NSObject <ProtocolB,ProtocolC>// _obj成员限定指向实现了ProtocolB的对象@property(nonatomic,strong) NSObject<ProtocolB> *obj;@end@implementation ClassA+(id)getSelfClass{return self;}- (NSObject<ProtocolA> *)getSelf{return self;}- (Class)getSelfClass{return [self class];}@endint main(){ClassA<ProtocolB> *a=[[ClassA alloc] init];// a2限定指向实现了 ProtocolA 的对象id<ProtocolA> a2=[[ClassA alloc] init];[a setObj:a2];NSLog(@"a=%@,aClass=%@,a2Class=%@",[a getSelf],[a getSelfClass],[[a2 class] getSelfClass]);return 0;}
protocol:
概念:
用来声明方法(也只能声明方法),遵守了该协议的 类或其他协议 就拥有这些方法的声明;
类似java中的interface,但是由于OC是弱类型语言(java为强类型),
许多类型上的不匹配都只是warning;
protocol与 (java中)interface 区别:
1>interface类型变量只能指向 实现了该interface的对象,
而protocol本身不是类型,无法用于声明变量;
这种多态的特征在OC中则表现为 指定了protocol 的变量
限定指向 遵守了该protocol的对象(OC中此类规则违反仅仅警告),
例:id<ProtocolA> p=[[ClassA alloc] init];(ClassA遵守了ProtocolA)
2>遵守了protocol却没实现当中方法只是警告,interface中是编译错误
声明protocol:
//NSObject为基协议,与基类NSObject同名,但不同,
//基类 NSObject 遵守了 基协议 NSObject
//与类都继承基类一样,官方建议 协议都遵守基协议
@protocol ProtocolA <NSObject>
//协议中声明的方法可以规定为须实现或可选,默认为 required
@required // 此后声明的方法都为required,遵守该协议的类中不实现就会警告
- (id<ProtocolA>)methodA:NSObject<ProtocolA> *obj;
- (void)methodB;
@optional // 此后声明的方法都为optional,遵守该协议的类中不实现不会警告
- (id)methodC:ClassA<ProtocolB> obj;
- (void)methodD;
@end
类遵守protocol:
// OC类是单继承,但可以遵守多个协议
@interface ClassA :NSObject <ProtocolA,ProtocolB>
@end
@implementation ClassA
//这里实现协议中的方法
@end
使用规范:
为了提高编译效率,.h一般不import协议,用@protocol ProtocolA,ProtocolB; 这种
方式来告诉编译器ProtocolA与ProtocolB是协议,而在.m中再import,
与@class ClassA,ClassB; 方式一样;
- OC学习笔记11--protocol使用方法及注意事项
- 学习笔记:OC的protocol协议及代理设计模式
- OC学习笔记之protocol
- OC学习笔记七 Protocol
- OC学习笔记[注意事项]
- 黑马视频学习笔记-OC-protocol
- OC学习笔记十---Block与@protocol
- oc学习笔记-protocol代理模式
- 黑马程序员---OC学习笔记之protocol概念及基本使用
- OC学习 - Protocol delegate
- 黑马程序员- IOS学习笔记-OC ARC、BLOCK、protocol
- 黑马程序员----OC学习笔记之category,extension,protocol
- OC学习笔记九 Protocol、Block、成员变量-补充
- objective-C学习笔记(六):OC之block和protocol
- OC学习那些事:Protocol
- OC学习小结之protocol
- OC学习:protocol的使用
- ScrolledComposite使用方法及注意事项
- 欢迎使用CSDN-markdown编辑器
- CodeRush使用教程一:代码分析
- 矩阵构造方法
- POJ2001 字典树
- Weka初体验——中文文本分类
- OC学习笔记11--protocol使用方法及注意事项
- BootStrap媒体对象
- 黑马程序员——正则表达式
- IOS开发基础之UIImage
- Android SQLite学习指南
- android m classpath
- Netroid学习笔记(一):初识Netroid
- Netroid学习笔记(二):请求的使用
- [Leetcode 113, Medium] Path sum II