·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> protocol(协议)

protocol(协议)

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23
 
  • 可以用来声明一大堆方法(不能声明成员变量)
  • 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明
  • 只要父类遵守了某个协议,就相当于子类也遵守了
  //定义一个名叫MyPRotocol的协议 MyProtocol.h @protocol MyProtocol <NSObject>     @required//要求实现,不识闲会发出警告,如果什么都不写,默认是@required -(void) test; -(void) test2;     @optional//不要求实现 -(void) test3; @end   Person.h @protocol MyProtocol;//协议的提前声明,类似@class @interface Person : NSObject <MyProtocol>   @end   Person.m #import  MyProtocol.h; @implementation Person  -(void) test{   } -(void) test2{   } @end  
  • 一个协议可以遵守其他多个协议,多个协议之间用逗号 , 隔开
  • 一个协议遵守了其他协议,就相当于拥有了其他协议中的方法声明

@protocol 协议名称 <协议1, 协议2>

@end

1》类遵守协议: @interface 类名 : 父类名<协议名称1,协议名称2> @end 2》协议遵守协议: @protocol 协议名称 <其他协议名称1,其他协议名称2> @end

1. 基协议

  • NSObject是一个基类,最根本最基本的类,任何其他类最终都要继承它
  • 其实还有一个协议,名字也叫NSObject,它是一个基协议,最根本最基本的协议
  • NSObject协议中声明很多最基本的方法,比如description、retain、release等
  • 建议每个新的协议都要遵守NSObject协议
要求obj3保存的对象必须是遵守MyProtocol这个协议; NSObject<MyProtocol> *obj3; id<MyProtocol> obj3; 要求obj4,保存的对象必须遵守MyProtocol3,并且继承了Person Person<MyProtocol3> *obj4; @property中声明的属性也可用做一个遵守协议的限制 @property (nonatomic,strong)类名<协议名称> * 属性名; @property (nonatomic,strong)id<协议名称>  属性名;     协议可定义在单独.h文件中,也可以定义在某个类中 1》如果这个协议只用在某个类中,应该把协议定义在该类中 2》如果这个协议用在很多类中,就应该定义在单独文件中   分类可定义在单独.h和.m文件中,也可以定义在原来类中 1》一般情况下,都是定义在单独文件 2》定义在原来类中的分类,只要求能看懂语法     #import "TicketDelegate.h" @interface Person : NSObject -(void) buyTicket; //拥有一个代理属性,代理的类名随便,必须遵守TicketDeltegate协议 @property (nonatomic,retain) id<TicketDelegate> delegate;   @end