黑马程序员——OC基础---协议

------- android培训java培训、期待与您交流! ----------


     1 -  概念

 

      一些方法的声明(注意:只是声明,没有实现!!同时也没有成员变量!!),一般写到一个.h的头文件中(command+n ->socre->->Objective-C File->File Type选择Protocol)。

       方法分为两种:

 

       1) 必须实现    关键字  @required 同时也是默认关键字

       2) 选择实现    关键字  @optional

 

     2 - 作用:

 

       供其他的类去遵守

      如果一个类或遵守了一个协议,就应该实现这个协议中定义的必须要实现的方法

 

     3 - 定义:

 

       @protocol 协议名  //默认情况下遵守 NSObject协议

        //方法列表

       @end

@protocol testOneProtocol 
@required//必须实现的方法
-(void)methodA;


@optional//可选择实现的方法
-(void)methodB;
@end


     4 - 类遵守协议的格式:


       1) 遵守一个协议:

 

         先导入协议头文件

 

       @interface类名 :NSObject <协议名>

 

       @end

#import 
#import "testOneProtocol.h"
@interface Girl : NSObject

@end

 
   

 

       2) 遵守多个协议 

         @interface类名 :NSObject <协议名1,协议名2,...,协议名n>

         

         @end

#import 
#import "testOneProtocol.h"
#import "testTwoProtocol.h"
@interface Student : NSObject

@end



3)协议与协议的继承

@protocol testOneProtocol 
-(void)methodA; 
@end
@protocol testTwoProtocol  
-(void)methodB;
@end


 
  

如果你遵守了testTwoProtocol协议,那么methodA和methodB都需要实现。

NSObjct协议是基础协议,如果你的自定义协议不需要遵守其他的协议,如上例testOneProtocol,那么请遵守NSObject协议

4)协议被父类A遵守后被子类B继承

父类A遵守协议后实现协议必须实现的方法,这些方法可以被A的子类继承,A的子类可以调用或者重写父类准售的协议

类与协议的关系可以简单总结为三句话

1) 一个协议,可以遵守其他的协议 

2) 一个类可以遵守多个协议  

3) 一个协议可以被多个类遵守

5协议作为类型限定使用

Dog *d = [Dog new];
Girl *g = [Girl new];
        
//第一种类型限制
id obj;
//增加以后,表示,obj只能赋值遵守了houseHold协议的对象
id obj = d;
        
// 第二种类型限制:
//表示,obj2在被赋值的时候,必须是遵守了houseHold协议的Girl对象.
Girl *obj2 = g;


第三种类型限制

#import 
#import "Dog.h"
#import "houseHold.h"
#import "caculatorProtocol.h"
@interface Girl : NSObject

//要求该实例变量必须是遵守了caculatorProtocol协议的Dog对象
@property (nonatomic,strong) Dog *dog;
@end



你可能感兴趣的:(黑马程序员——OC基础---协议)