iOS—协议语法

协议语法

一、作用:专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明). 

只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法声明.


二、新建1个协议的方式. NewFile OC-File - protocol

                                   协议的文件名: .h 并且只有1个.h文件.

                                   在协议中,只能用来声明方法,协议的作用:就是专门用来写方法声明的.

协议中的方法并不是由协议本身去实现,相反而是由遵循这个协议的其他类来实现。换句话说,协议myProtocol只是完成对协议函数的声明而并不管这些协议函数的具体实现。

 三、协议的声明:

  1. @protocol myProtocol <NSObject>           //协议名为myProtocal
  2. @required                                 //必须实现的协议接口
  3. -(void) protocolNameA:(NSString*)string;  
  4. @optional                                 //可实现可不实现的接口
  5. -(void) protocolNameB:(NSString*)string;  
  6. @end                                      //协议定义结束
协议的定义通常在.h文件中

四、定义一个类遵循这个协议:

@interface 类名 : 父类名 <协议名称>  

@end

//三种不同情况

  1. @interface myClass  <myProtocol>              
  2. @interface myClass :NSObject<myProtocol>  
  3. @interface myClass :NSObject<myProtocol, NSCoding>  
编译的时候编译器会自动检查myClass是否实现了myProtocol中的必要的(@required)接口。如果没有实现则会发出一个警告信息。

如果有继承自myClass的子类,这些子类也是会自动遵循myClass所遵循的协议的,而且也可以重载这些接口。

  • 当1个类,遵守了1个协议,那么就相当于这个类拥有了协议中定义的所有的方法的声明.
  • 这个类只是拥有了这个协议中的方法的声明而已. 没有实现.所以 这个类,就应该实现协议中的方法.


  • 当1个类,遵守了1个协议,那么就相当于这个类拥有了协议中定义的所有的方法的声明.
  • 这个类只是拥有了这个协议中的方法的声明而已. 没有实现.所以 这个类,就应该实现协议中的方法.

五、类是单继承,但协议可以多遵守

@interface 类名 : 父类名 <协议名称1,协议名称2......>  

@end

  • 当1个类遵守了多个协议之后,就相当于这个类拥有了所有协议中定义的方法的声明.

    • 那么这个类,就应该实现所有协议中的方法.

    • 如果不实现,其实也不会报错.编译器只是会报警告.

    • 但是当创建对象,来调用这个没有实现的协议中的方法的时候,就会报错

六、协议可以遵守另外1个协议,并且可以遵守多个协议

@protocol 协议名称3 <协议名称1,协议名称2......>  
@end

那么这个协议3就拥有协议1、协议2……的所有的方法的声明.

  • 如果某个类遵守了协议3.那么这个类就拥有协议1、2、3的所有的方法的声明.

  • 任何协议都必须要间接的或者直接的从NSObject基协议继承

    协议之间继承的语法格式

    @protocolA协议名称 <B协议名称>

    @end

    代表A协议继承自B协议, A协议中既有自己的方法声明,也有B协议中的方法声明.

    • NSObject: 这是1个类. 是所有的OC类的基类. 这个类是苹果早就定义好得.
    • NSObject: 这也是1个协议. 也是苹果早就定义好得. 这个协议被NSObject类遵守.

      • 所以,所有的OC对象都拥有这个协议中的所有的方法. 
      • 这个协议我们也叫做基协议.
    • 写协议的规范: 任何1个协议,必须要间接的或者直接的去遵守这个NSObject基协议.

    • 协议的名称可以和类的名称相同:

      • 如果父类遵守了某个协议,那么父类就相当于拥有协议中方法声明,子类也有了.
      • 相当于子类也遵守了这个协议.





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值