OC Protocol

来源:互联网 发布:淘宝关联营销怎样设置 编辑:程序博客网 时间:2024/04/29 05:34

  • OC Protocol
    • protocol 基本概念
    • protocol 语法格式
    • protocol 和 继承的区别
    • protocol 使用注意
    • 基协议
    • required optional 两个关键字的使用
    • 使用场景
    • 代理设计模式
    • 引申 private protected public

OC Protocol

1. protocol 基本概念

  • protocol 翻译为 协议
  • 在Java中有接客interface的概念, 接口就是一堆方法的什么没有实现,而在的interface是一个类的头文件的声明,并不是真正意义的接口的意思,在OC中是有一个叫protocol来实现的。
  • protocol 可以用来声明一些必须实现或选择实现的方法,这个和Java中是完全不同的。
  • protocol 的作用
    • 用来什么一些方法
    • 也就是说一个protocol是有一系列方法的声明来实现的。

2. protocol 语法格式

  • Protocol 的定义

    @protocol 协议名称
    // 方法声明列表
    @end

  • 用类去遵守协议protocol

    • 任何类只要遵守了协议protocol就相当于有了protocol所有方法的声明。
    • 一个类可以遵守一个或者多个协议。

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

    • 协议也可以继承协议!

3. protocol 和 继承的区别

  • 继承之后就默认有了实现,而protocol 只有声明没有实现
  • 相同类型的类中可以使用继承,比如老师学生都可以继承自人。但是不同类型的类只能使用协议Protocol。
  • protocol可以用于存储方法中的什么,将多个类共同的方法抽取出来,以后让这些类去遵守协议即可。

4. protocol 使用注意

  1. protocol 就一个用途,就是用来存放一堆方法的声明,不能写实现,也不能声明属性、成员变量。
  2. 只要父类遵守了协议,子类就也遵守。
  3. OC中不支持多继承类, 但是可以继承多个协议,尖括号内用逗号隔开。继承是冒号:
  4. 协议可以遵守协议, 只要B协议遵守A协议, 遵守B协议的类C 就同时拥有了AB协议的所有方法声明。

  5. 创建一个类建议继承 NSObject
    创建一个协议建议遵守 @protocol < NSObject >;

5. 基协议

  • NSObject 是一个基类 ,最基本最根本的类,所有的类最终都是继承NSObject ;
  • @protocol < NSObject > 是基协议,是最基本最根本的协议。
  • 建议每个协议都遵守 @protocol < NSObject > 协议。

6. @required @optional 两个关键字的使用

  • @required 是必须实现的方法。
  • @optional 是必须实现的方法。
  • 如果没有任何关键字修饰的方法,默认情况就是@required 必须实现的。如果类中没实现该方法,就会警告缺少该方法!
  • @optional 没有实现不会警告
  • 作用范围 出现开始 到 下一个关键字为止,用于程序猿交流。

7. 使用场景

  1. 注意 变量赋值的时候 ! // 创建wife的时候直接在wife右边要求满足协议。 协议使用第一个应用场景,可以将协议写在数据类型的右边,明确表示如果要给该变量赋值, 必须要该对象遵守这个协议
  2. 注意 成员属性定义时 可以写入协议//类的声明中! 注意 类型限定一定是写在类型数据的右边!!!
  3. 注意 虽然接收了某一个对象的时候,对这个对象进行了类型限定(限定其必须实现某个协议),但是并不是意味着对象就真的实现了协议里的方法。所以要在调用对象的协议方法时候进行一次验证。防止光说不做 赖皮!
 if([self.wife respondsToSelector(cooking)]){ [self.wife cooking]}
  • 设定场景
    • 某程序猿要找一个媳妇 ,要求会做饭,会洗衣服,有国企工作的漂亮女生。
    • 满足条件的女生都可以向他发送消息。
@protocol wifeCondtion  < NSObject >-(void)cooking;-(void)washing;-(void)job;@end//协议使用第一个应用场景,可以将协议写在数据类型的右边,明确表示如果要给该变量赋值, 必须要该对象遵守这个协议wife < wifeCondtion > * wifeName =[[ wife alloc]init];@interface Person : NSObject//注意  类型限定一定是写在类型数据的右边!!!@propertynonatomic,strong)Wife < WifeCondtion> * wife;@end

8. 代理设计模式

* 引申 @private @protected @public

指令 含义 @private 作用范围只能在自身类 @protected 作用范围在自身类和继承自己的子类,什么都不写,默认是此属性。 @public 作用范围最大,在任何地方

2015-04-03 21:36:19 Write By MarkDown © Yun.

0 0
原创粉丝点击