黑马程序员——OC语言Protocol(协议)
2014-10-06 23:04
399 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------
0.概念
1>协议(Protoco)是一系列方法的列表,其声明的方法可以被任何类实现,一般称为代理模式。
2>在.h文件中@protocol声明存在协议,跟@class一样
1.作用:
1>可以声明很多方法,但是不能声明成员变量。
2>如果某个类遵守了某个协议,则这个类拥有协议中的所有方法声明。
3>如果父类遵守了某个协议,则子类也遵守了这个协议,
2.基本语法
1>定义协议
// 定义一个协议,协议名称是myprotocol,NSObject是基协议,每个协议必须遵守
2>协议关键词
@required:要求方法必须实现,比实现就会发出警告,默认此
@optional: 不要求一定实现
eg:
3>如何遵守协议
(1)类遵守协议
@interface 类名:父类名 <协议名称1,协议名称2>
@end
(2)协议遵守协议。
@protocol 协议名 <协议1,协议2>
@end
3.基协议
(1)NSOBject是基协议,最根本最基本的协议。
(2)建议每个新协议都遵守基协议NSObject协议。
4.限制这个对象遵守协议
类名<协议名称> *变量名; eg:NSObject<myprotocol> *obj; // obj对象遵守myprotocol协议
id<协议名称> 变量名; eg:id<myprotocol> obj2;
5.@property中声明的属性遵守协议
@property (nonatomic,strong) 类名<协议名称> *属性名
@property (nonatomic,strong) id<协议名称> 属性名
6.协议可定义在单独的.h文件中,也可定义在某个类的.h文件中
(1)如果这个协议只能用于某个类,则此协议定义在此类的.h文件中
eg:如果myprotocol1协议只用能在Person类中,则此 协议需要定义在Person类的.h文件中
(2)如果这个协议需要多个类使用,则此协议定义在单独的.h文件中
eg:如果myprotocol1协议要被多个类同时使用,则需要将此协议单独定义在协议的.h
7.分类可定义在单独.h和.m文件中,也可定义在原来类中
(1)一般定义在单独.h和.m文件中
(2)定义在原来类中的分类,只要求能看懂语法
8.代理设计模式
定义:为其它对象提供一种代理以用来控制这个对象,我们不关心代理如何完成的,只关心代理有没有完成。
eg: 小明不想做饭,因此请了个保姆,但是请保姆需要签一份协议,保姆需要遵守协议。所以保姆就是代理,代理需要遵守某个协议。
条件:如果要成为代理,则必须遵守某个协议(协议用于声明方法,限制代理必须拥有某个方法)。
作用:可以监听某个方法是否被触发。
优点:耦合性较低,增加了代码的弹性。
eg:代理被删除了,但是Person还在。代理和对象之间互不影响。
9.总结
可以在某个文件中声明很多方法,方便多个类调用。
例如如果有很多类都需要某个方法,这样的话这些类都可以遵守这个协议,就不需要在每个类中编写相同的方法。提高了程序编写效率。
0.概念
1>协议(Protoco)是一系列方法的列表,其声明的方法可以被任何类实现,一般称为代理模式。
2>在.h文件中@protocol声明存在协议,跟@class一样
1.作用:
1>可以声明很多方法,但是不能声明成员变量。
2>如果某个类遵守了某个协议,则这个类拥有协议中的所有方法声明。
3>如果父类遵守了某个协议,则子类也遵守了这个协议,
2.基本语法
1>定义协议
// 定义一个协议,协议名称是myprotocol,NSObject是基协议,每个协议必须遵守
@protocol myprotoco <NSObject> - (void)test; // 声明test方法 - (void)test2; // 声明test2方法 @end
2>协议关键词
@required:要求方法必须实现,比实现就会发出警告,默认此
@optional: 不要求一定实现
eg:
@protocol myprotoco @required - (void)test; // 声明@required类型test方法,且要求此方法必须实现 @optional - (void)test2; // 声明@optional类型test2方法,不一定要求此方法实现 @end
3>如何遵守协议
(1)类遵守协议
@interface 类名:父类名 <协议名称1,协议名称2>
@end
eg:@interface Person : NSObject <protocol1,procotol2 > @end
(2)协议遵守协议。
@protocol 协议名 <协议1,协议2>
@end
3.基协议
(1)NSOBject是基协议,最根本最基本的协议。
(2)建议每个新协议都遵守基协议NSObject协议。
4.限制这个对象遵守协议
类名<协议名称> *变量名; eg:NSObject<myprotocol> *obj; // obj对象遵守myprotocol协议
id<协议名称> 变量名; eg:id<myprotocol> obj2;
eg:NSObject<myprotocol> *obj2 = [[Person alloc] init]; // 等号右边的Person类也必须遵守此协议,在Person类中需指定遵守此协议</span>
5.@property中声明的属性遵守协议
@property (nonatomic,strong) 类名<协议名称> *属性名
eg: @property(nonatomic,strong) Person<myprotocol> *p; // p属性遵守myprotocol这个协议</span>
@property (nonatomic,strong) id<协议名称> 属性名
6.协议可定义在单独的.h文件中,也可定义在某个类的.h文件中
(1)如果这个协议只能用于某个类,则此协议定义在此类的.h文件中
eg:如果myprotocol1协议只用能在Person类中,则此 协议需要定义在Person类的.h文件中
(2)如果这个协议需要多个类使用,则此协议定义在单独的.h文件中
eg:如果myprotocol1协议要被多个类同时使用,则需要将此协议单独定义在协议的.h
7.分类可定义在单独.h和.m文件中,也可定义在原来类中
(1)一般定义在单独.h和.m文件中
(2)定义在原来类中的分类,只要求能看懂语法
8.代理设计模式
定义:为其它对象提供一种代理以用来控制这个对象,我们不关心代理如何完成的,只关心代理有没有完成。
eg: 小明不想做饭,因此请了个保姆,但是请保姆需要签一份协议,保姆需要遵守协议。所以保姆就是代理,代理需要遵守某个协议。
条件:如果要成为代理,则必须遵守某个协议(协议用于声明方法,限制代理必须拥有某个方法)。
作用:可以监听某个方法是否被触发。
优点:耦合性较低,增加了代码的弹性。
eg:代理被删除了,但是Person还在。代理和对象之间互不影响。
9.总结
可以在某个文件中声明很多方法,方便多个类调用。
例如如果有很多类都需要某个方法,这样的话这些类都可以遵守这个协议,就不需要在每个类中编写相同的方法。提高了程序编写效率。
相关文章推荐
- 黑马程序员——OC语言学习——ARC机制、block代码块、protocol协议、protocol协议的应用
- 黑马程序员——OC语言中的协议protocol
- 黑马程序员——OC语言的protocol协议
- 黑马程序员——OC语言------Block、protocol协议、代理设计
- 黑马程序员-OC语言协议Protocol
- 黑马程序员——OC语言——block、protocol、代理模式
- 黑马程序员 OC语言 - 6 block、协议
- 黑马程序员_OC_block和protocol协议
- 黑马程序员——10、OC语言(block、protocol和代理模式)
- 黑马程序员————OC语言BLOCK和Protocol总结
- 黑马程序员——OC—block和protocol协议
- IOS开发---OC语言-㉚protocol协议
- 黑马程序员_OC语言的块和协议
- 黑马程序员IOS-OC语言-分类、协议
- 黑马程序员——OC语言基础篇---block和protocol
- 黑马程序员---OC基础---Block、分类Category、协议protocol
- 黑马程序员——OC学习小结------arc,block,protocol(协议)
- 黑马程序员_OC基础13_协议protocol
- 黑马程序员——OC学习之协议protocol的使用
- 黑马程序员-OC语言之协议