首页 > 代码库 > Objective-C:10_protocol

Objective-C:10_protocol

protocol:协议 (相当于C#中的接口)
协议最多用在:代理模式、观察者模式
 OC中类只支持单继承,但是可以遵守多份协议  <协议1,协议2,协议3。。。。。>
定义一个名叫MyProtocol的协议
@protocol MyProtocol
 
@end
 
只要一个类遵守了谋一份协议,就能拥有这份协议中所有的方法声明
    一个类遵守某份协议的方法:
        @interface Person : NSObject    <MyProtocol>
        @end
 
    : 继承
    <>    遵守协议
 
@protocol MyProtocol
 
@required  //在这个关键字之后的方法声明都要求实现,不实现就会有警告(默认就是@required)
@optional  //在这个关键字之后的方法声明不要求实现(不实现也不会有警告)
 
@end
 
协议也可以遵守另一个协议(就像C#中接口可以实现另一个接口一样)
    一个协议遵守了另外一个协议,就可以拥有另一个协议的所有方法声明
 
 
基协议:
    1、NSObject是一个基类,最根本最基本的类,任何其他类最终都要继承它
    2、其实还有一个基协议,名字也叫NSObject,它是一个基协议,最根本最基本的协议
    3、NSObject协议中声明很多最基本的方法,比如description、retain、release等
    4、建议每个新的协议都要遵守NSObject协议
 
 
 
可以使用协议限制对象类型:
    要求obj,保存的对象必须遵守MyProtocol协议、并且继承了Person
        Person<MyProtocol> *obj = [[Person alloc] init];
    
    一个类需要遵循协议的时候需要引用协议
        一种方法是#import <MyProtocol.h>
        一种方法是@protocol  MyProtocol   (使用这种方法的时候需要再对应的 .m 文件中#import <MyProtocol.h>)优先使用这种方法
 
        
总结:
    1、协议的定义
        @protocol   协议名称  <NSObject>
            //方法声明列表。。。。。
        @end
 
    2、如何遵守协议
        -》类遵守协议
        @interface  类名:父类名  <协议名称1,协议名称2........>
 
        @end
 
        -》协议遵守协议
        @protocol  协议名称  <其他协议名称1,其他协议名称2...........>
        
        @end
 
    3、协议中方法声明的关键字
        -》@required(默认)  要求实现,如果没有实现,会发出警告
        
        -》@optional        不要求实现,怎样都不会有警告
 
 
    4、定义一个变量的时候,限制这个变量保存的对象遵守某个协议
        类名<协议名称>  *变量名;
        id<协议名称>   变量名;
        
        NSObject<MyProtocol>  *obj;
        id<MyProtocol>  obj2;
 
        如果没有遵守对应的协议,编译器会警告
 
    5、@proerty中声明的属性也可以用做一个遵守协议的限制
        @property  (nonatomic , strong) 类名<协议名称> *属性名;
        @property  (nonatomic , strong)  id<协议名称>   属性名;
        
        @property  (nonatomic , strong)  Dog<MyProtocol> *dog;
        @property  (nonatomic , strong)  id<MyProtocol>  dog;
 
    6、协议可以定义在单独的.h文件中,也可以定义在某个类中
        如果这个协议只用在某个类中,应该把协议定义在类中
        如果这个协议用在很多类中,应该定义在单独文件中
 
    7、分类可定义在单独的 .h和 .m文件中,也可定义在原来类中
        一般情况下,都是定义在单独文件中
        定义在原来类中的分类,只要求能看懂语法
 
 
 
 
 
 
 
 
 
 
 
 

Objective-C:10_protocol