您的位置:首页 > 编程语言 > C语言/C++

OC语言——protocol

2015-03-25 12:34 155 查看
本着服务自己的原则,坚持书写!

protocol:(协议)符号:<>

声明一大堆方法(不能声明成员变量),只要某个类遵守了这个协议,那么相当于拥有这个协议的所有方法声明。

父类遵守了某个协议,那么子类也遵守了。

书写格式:

@protocol 协议名称
//方法声明列表
@end


同时需要注意两个关键字

@required // 要求实现,不实现就会发出警告 (默认情况)

@optional // 不要求实现

// 定义了一个名叫MyProtocol的协议
@protocol MyProtocol <NSObject>

- (void)test3;

@required
- (void)test;
- (void)test1;

@optional
- (void)test2;

@end


在其他类的声明中就要遵守这个协议:

@interface Person : NSObject <MyProtocol>

注:后面的“<>”中可以书写多个协议,只要中间用“,”隔开

@interface  协议名称 : NSObject <协议1,协议2>
@end


例如:

@interface Person  <MyProtocol, MyProtocol2, MyProtocol3>
@end


协议间的遵守和基协议

一个协议遵守了另外一个协议,就拥有了另外一个协议所拥有的方法声明

@protocol 协议1 <协议2> // 协议1里面拥有协议2的所有方法,不必再去写方法的声明了

基协议:<NSObject>

所以写协议要这样:

@protocol MyProtocol <NSObject> // 遵守基协议<pre name="code" class="objc">@end


或者:

@protocol MyProtocol2 <MyProtocol> // 遵守MyProtocol协议,也就相当于遵守了NSObject协议<pre name="code" class="objc">@end



限制对象类型:

//
要求a1,保存的对象必须遵守MyProtocol,并且继承了Person

Person<MyProtocol> *a1 = [[Person alloc] init];
a1 = nil;


保存的对象遵守了协议,又要继承某个类:

// 要求obj,保存的对象必须遵守MyProtocol、并且继承了Person
Person<MyProtocol> *obj = [[Person alloc] init];


另一种类型(看懂即可):继承了Person类,遵守MyProtocol协议

id<MyProtocol> obj4 = [[Person alloc] init];

obj4 =nil;


遵守协议的set方法:

@property (nonatomic, strong) id<MyProtocol> a;


协议的提前声明:

l类的声明:可以使用@class提前声明一个类

@class Person

协议也可以:

@protocol MyProtocol;

但是真正需要协议的时候,必须在.m文件中声明#import <MyProtocol.h>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: