天天看点

黑马程序员——IOS基础——Protocol协议

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

MyProtocal1.h://这是协议类

#import <Foundation/Foundation.h>
@protocol MyProtocol1 <NSObject> //这是基协议,一定要遵守
@required //默认required,必须要实现
- (void)test1;
- (void)test2;
@optional //可选实现
- (void)test3;
@end
           

MyProtocal2.h://这是协议类

#import <Foundation/Foundation.h>
@protocol MyProtocol2
- (void)haha2;
@optional
- (void)haha3;
@end
           

只要一个类遵守了一份协议,就能拥有这份协议中的所有方法声明

协议不能写实现,仅仅添加方法声明

协议和分类一样,不能写成员变量

 : 继承父类

 <> 遵守协议

Person.h:

#import <Foundation/Foundation.h>
#import "MyProtocol1.h"
#import "MyProtocol2.h"
@interface Person : NSObject <MyProtocol1,MyProtocol2> //类似java中的接口,OC也可以实现多个协议
@end
           

基本用途:

>可以声明一堆方法,单不能声明成员变量

>只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明

>只要父类遵守了某个协议,就相当于子类也遵守了

>用于代理模式和观察者模式

>一个协议可以遵守另一个协议:

@protocol MyProtocol2 <MyProtocol1>
- (void)haha;
@end
           

1.协议的定义:

@protocol 协议名称 <NSObject>

//方法声明列表

@end

2.如何遵守协议

>类遵守协议:

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

@end

>协议遵守协议

@protocol 协议名称 <其他协议名称1,其他协议名称2>

@end

3.协议中方法声明的关键字

>@required(默认) :要求实现声明此关键字的方法,如果没有实现,会发出警告

>@optional : 可选实现,不会有警告

4.定义一个变量的时候,限制这个变量保存的对象遵守某个协议

类名<协议名称> *变量名

id<协议名称> 变量名

NSObject<MyProtocol> *obj;

id<MyProtocol>obj2;

[email protected]中声明的属性也可用做一个遵守协议的限制

@property (nonatomic, strong) 类名<协议名称> *属性名

@property (nonatomic, strong) id<协议名称> 属性名    //id就相当于   类名*

6.协议可以定义在单独.h文件中,也可以定义在某一类中

>如果这个协议只用在某个类中,应该把协议定义在该类中

>若果这个协议用在很多类中,就应该定义在单独文件中

7.分类可以定义在单独.h和.m文件中,也可以定义在原来类中

>一般情况下,都是定义在单独文件

>定义在原来类中的分类,只要求能看懂语法

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