协议

 1.协议 protocol。

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

  2.只要某个类遵守了这个协议,就相当于拥有这个协议中的所有的声明,而不用自己要去定义。

2.协议的声明

  @protocol 协议名字 <NSObject>、

  方法的声明;

  @end

  新建一个协议的方式。 command+N -》OC-File-protocol;

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

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

@protocol MyProtocol <NSObject>

-(void)run;
-(void)sleep;


@end

  

3.类遵守协议

  协议就是用来写方法声明的,就是用来被类遵守的。

  如果想要让一个类,拥有协议中定义的所有的方法声明,那么就让这个类遵守这个协议。

  类只要遵守一个协议,那么这个类就拥有了这些协议中定义的所有的声明方法。

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

 

@end

 

  :表示继承

  <>表示遵守的协议。

  当一个类遵守了一个协议,那么就相当于这个类拥有了协议中定义的所有的方法的声明。

  这个类知识拥有了这个协议中的声明的方法,而没有实现,所以 这个类。就应该实现协议中的方法。

 

  如果类不识闲协议中的方法,其实也不会报错,编译器只是会警告。  

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

 

 

 4.类是单继承,但是协议可以多继承

  1个类只能有一个父类  

  但是1个类可以同时遵守多个协议

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

  @end

 

@interface Cat : NSObject<MyProtocol,YourProtocol>

  

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

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

 

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

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

 

  

5.@required 和@optional

  @required 和@optional这两个修饰符是专门用来修饰协议中的方法

 

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

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

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

  唯一的区别就是:当遵守协议的类不实现协议中的方法时候,@required会给一个警告,@optional警告都没有,这两个关键字的主要作用:在于程序员沟通,告诉遵守协议的类,哪些方法时必须实现,因为这些方法我会调用。默认的是@required

 

 

2.协议与协议之间可以相互继承

  1.继承的语法:

    @protocol 协议名<父协议名称>

    @end

  2.效果:

    子协议中不仅有自己的方法的声明,还有父协议中的所有的方法声明。

    如果一个类遵守了某份协议,那么这个类就拥有这个协议和这个协议的父协议中的所有方法。

 

2. NSObject

  在Foundation框架中,有一个类叫左NSObject 是所有OC类的基类。

  在Foundation框架中,有一个协议叫做NSObject

  NSObject协议被NSObject类遵守。  

 

  类的名称可以和协议的名称一样。

 

      遵守了某个协议的类,就相当于这个类拥有了这个协议所定义的行为

      只有类遵守了协议,这个类中才会有协议方法

 

 

 

 

 

 

 

 

posted on 2017-03-28 09:33  Veritas_Yang  阅读(211)  评论(0编辑  收藏  举报