OC语言——protocol

本着服务自己的原则,坚持书写!


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>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值