协议的基本使用

协议:protocol

  • 作用: 专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明).
    • 只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法声明.

协议的声明

 @protocol 协议名称 <NSObject>

     //方法的声明;

     @end
  • 新建1个协议的方式. NewFile OC-File - protocol

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

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

类遵守协议

  • 如果想要让1个类,拥有协议中定义的所有的方法声明.那么就让这个类遵守这个协议.
    • 类只要遵守1个协议,那么这个类就拥有了这些协议中定义的所有的方法的声明了.
@interface 类名 : 父类名 <协议名称>

     @end
  • : 表示继承.
    • <> 表示遵守的协议.

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


协议和延展的区别

  • .1个延展只能针对1个类.
    • 1份协议 可以多个类都来遵守,他们都拥有协议中的方法的声明
    • 延展的成员是私有. 协议的成员是公开的
    • 1个类遵守1个协议,就相当于这个类拥有这个协议中的方法的声明.

  • 如果类不实现协议中的方法,其实也不会报错.编译器只是会报警告.
  • 但是当创建对象,来调用这个没有实现的协议中的方法的时候,就会报错.

类是单继承. 但是协议可以多遵守

  • 1个类只能有1个父类
  • 但是1个类可以同时遵守多个个协议.
@interface 类名 : 父类名  <协议名称1,协议名称2......>

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

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

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

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

@required 与 @optional

  • 在协议中,如果方法的声明被@required修饰,那么遵守这个协议的类必须要实现这个方法,否则编译器会发出警告.

    • 在协议中,如果方法的声明被@optional修饰,那么遵守这个协议的类可以实现这个方法,也可以不实现这个方法.不实现编译器也不会报警告.

    • 其实,无论是@required还是@optional你都可以不实现. 编译器是不会报错的. 仍然可以编译 运行.


  • 作用: @required修饰的方法如果遵守协议的类没有实现 编译器给1个警告.
    • @optional修饰的方法如果遵守协议的类没有实现 编译器不会给警告.
      • 无论是@required还是@optional如果没有实现方法 在运行的时候还是会报错.

  • 这两个关键字的主要作用:在于程序员沟通,告诉遵守协议的类 哪些方法是必须要实现的,因为这些方法我会调用.
  • 写协议的人,告诉遵守协议的类 哪些方法必须要实现 哪些方法可以不实现.

    为什么必须要实现? 因为这个方法我要调用.

    默认的是@required

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

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

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

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

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


    • 协议可以继承另外1个协议. A 协议 继承了 B协议. 那么A协议中不仅有自己的方法的声明,还有B协议中的方法的声明.
    • 如果有1个类遵守了A协议,那么这个类就拥有了, A、B协议中的所有的方法的声明.

      协议之间继承的语法格式

@protocol A协议名称 <B协议名称>

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

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

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

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


    • 如果父类遵守了某个协议,那么父类就相当于拥有协议中方法声明,子类也有了.
    • 相当于子类也遵守了这个协议.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值