protocol协议的使用
创建文件,选择object c - protocol,只有.h文件
@protocol Myprotocol
{
-(void)test1;
@required//默认,要求实现,不实现会发出警告,方便协同交流(不同于java中接口不实现会报错)
-(void)test2;
@optional//不要求实现
-(void)test3;
}
协议关键字:required、optional
用来声明方法,类想要拥有这些方法,只需遵守这个协议
#import “MyProtocol.h” //:继承<>遵守协议 @interface Person:NSObject <MyProtocol> @end
在.m文件中实现方法
@implementation Person
-(void)test1
{
}
-(void)test2
{
}
@end
因此协议的基本用途1、可以用来声明一大堆方法,不能声明成员变量
2、只要类遵守了这个协议,相当于拥有这个协议所有方法的声明
3、只要父类遵守了这个协议,相当于子类也遵守了
多个协议
继承只能有一个,oc是单继承,协议可以遵守多个
#import “MyProtocol1.h” #import “MyProtocol1.h” @interface Person:NSObject <MyProtocol1,MyProtocol2> @end
基协议
协议遵守协议:一个协议遵守另一个协议,即可拥有另一个协议的所有方法声明
@protocol MyProtocol3 <MyProtocol1,MyProtocol2> @end
NSObject是一个基协议,而基类NSObject遵守基协议,因此所有继承了NSObject也遵守基协议。任何协议要遵守基协议 。
变量遵守协议
NSObject<MyProtocol> *obj1 = [[Person alloc] init];//注意Person要遵守MyProtocol协议,否则会有警告 id<MyProtocol> obj2 = [[Person alloc] init]; @property (nonatomic, strong) id<MyProtocol> obj3; @property (nonatomic, strong) Person<MyProtocol> obj4;
协议的提前声明
//.h文件中 //原#import "MyProtocol.h"改为 @protocol MyProtocol; //.m文件中实际用到再导入 #import "MyProtocol.h"
也可以直接写在类头文件中,当协议只有当前类用时,协议写在里面,如下
@protocol MyProtocol<NSObject> -(void)test; @end @interface Student:Person<MyProtocol> @end
当协议多个类使用时,写单独文件,同理category也可写类中(大部分单独文件中)
代理(委托)设计模式
就是一个人让另一个人帮助他做某事
协议的定义
@protocol TicketDelegate <NSObject> //票价 - (double) ticketPrice; //剩了多少张票 - (int) leftTicketNumber; @end
代理遵守协议并实现方法
@interface Agent : NSObject <TicketDelegate> @end
@implementation Agent
- (double) ticketPrice
{
}
- (int) leftTicketNumber
{
}
@end
person类中_delegate这个对象代表着所使用的代理,当person需要换成另一个代理时会很麻烦,因此使用万能指针 id类型, 这样就可以不用每次都改变代码,但是这样使用id声明调用方法的时候系统不知道调用谁,这属于运行期的多态。在编译期无法识别代理类的方法,我们需要一个更灵活低耦合的模式即利用协议 ,当做一个 “用户”与 “代理”之间的中转站。
@interface Person : NSObject - (void) buyTicket; //拥有一个代理,必须遵守协议 @property (nonatomic,retain) id<TicketDelegate> delegate; @end
@implementation Person
//想看电影
- (void) buyTicket
{
//让代理帮忙买票
double price = [_delegate ticketPrice];
int number = [_delegate leftTicketNumber];
NSLog(@"通过代理知:票价 = %f,剩余票数 = %d",price, number);
}
@end
本文深入探讨Objective-C中的协议概念,包括如何定义和使用协议、协议的关键字、遵守多个协议的方法、基协议的作用以及如何在类中声明遵守协议的变量。此外,还介绍了代理设计模式,并展示了如何通过协议来实现它。
413

被折叠的 条评论
为什么被折叠?



