holydancer原创,如需转载,请在显要位置注明:
转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details/7366373
上一往篇文章中我们谈到了非正式协议类别,可以在一个类中补充方法。但是这个方法你可以不去调用。协议类似于java的接口,如果一个协议中定义了某些方法,而某类又实现了该协议,那么该类必须实现这些方法。换句话说,协议是一组公用的方法声明,谁实现协议,谁就负责实现这些方法,不然会有黄色警告。协议可以扩展已有协议。协议的关键字是protocol,以@protocol开始声明,以@end结束。在类中实现协议时,只需要在类名后面加个<协议名>,即可。下面 看代码:
先定义一个协议:eat.h
- #import <Foundation/Foundation.h>
- @protocol eat <NSObject>//协议eat扩展了协议NSObject.h
- -(void)eat;
- @end
上面扩展的NSObject协议不用实现,因为继承于NSObject的类已经继承了对NSObject协议的实现
下面创建一个类:Human.h
- #import <Foundation/Foundation.h>
- #import "eat.h"
- @interface Human : NSObject <eat>
- @end
Human.m
- #import "Human.h"
- @implementation Human
- -(void)eat
- {
- NSLog(@"协议中定义的eat");
- }
- @end
在main.m中调用:
- #import <Foundation/Foundation.h>
- #import "eat.h"
- #import "Human.h"
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- Human *human =[[Human alloc] init];
- [human eat];
- }
- return 0;
- }
2012-03-18 14:35:29.099 category1[1752:403] 协议中定义的eat
很简单吧,另外,在新版本的objective-c中,增加了协议的一些可选项,@optional,@required,协议中的方法必须实现,不然会报错,但是如果以@optional修饰的话便没有这种限制,默认必须实现的方法其实就相当于以@required修饰,比如上面的代码,我们可以做出以下修改:
eat.h
- #import <Foundation/Foundation.h>
- @protocol eat <NSObject>//协议eat扩展了协议NSObject.h
- -(void)eat;
- @optional
- -(void)playGuitar;
- @required
- -(void)sleep;
- @end
这样的话,sleep方法和eat方法同样必须实现,而playGuitar方法便可选实现,是不是很人性化。
关键字:objective-c ,objective c , oc ,正式协议,protocol
相关推荐
1. GNUStep的安装 2. 类定义 3. Objective-C中的布尔类型 4. Objective-C中的null...13. 协议@protocol 14. 内存管理 15. 常用的类型 16. 写入和读取属性 17. 对象的复制 18. 多线程 19. KVC 与KVO 20. 谓词NSPredicate
技术关键词:Objective-C、iOS开发、Mac OS X、编程语言、面向对象编程、内存管理、自动引用计数(ARC)、协议(protocol)、类扩展(category)、键值观察(KVO)、键值编码(KVC)、Block、Delegate模式、多态性、...
Objective-C教程要点 ...协议与代理:理解协议(Protocol)和代理(Delegate)设计模式在Objective-C中的应用。 块与闭包:学习如何使用块(Block)实现闭包(Closure)功能。 多线程与并发:了解GCD(Grand Central Dispa
C协议实现适配器模式8.5 用Objective-C的块在iOS 4中实现适配器模式8.5.1 块引用的声明8.5.2 块的创建8.5.3 把块用作适配器8.6 总结第9章 桥接9.1 何为桥接模式9.2 何时使用桥接模式9.3 创建iOS版虚拟仿真器9.4 总结...
本套PPT,拥有以下OC语言的内容: 一、OC的三大特性(封装、继承、多态) 二、OC的特有语法(点语法、@property、@synthesize关键字、id、构造方法、分类、...四、协议(protocol)代码块(block) 五、ARC 等等
方便的 Objective-C '扩展' 该库包括扩展以增强语言并避免需要通用样板代码。 它重量轻,可以完全无风险地安装在项目中。 扩展摘要 @implementation_combine 就像一个普通的类别实现,有一个关键区别:任何已经在...
一个演示objective-c下的协议与代理的示例程序,自己写的,希望能给大家启发或者帮助
是使用的加密消息传递协议的Objective-C包装器。 该库旨在与加密的iOS消息传递应用程序,但从理论,它应该也可以在Mac OS X上运行,并且需要对构建脚本进行一些小的调整。 依存关系 安装 要为iOS编译libotr和依赖...
ProtocolKit, Objective C的协议扩展 ProtocolKitobjective-c的协议扩展用法你的协议:@protocol Forkable <NSObject>@optional- (void)fork;@required
5. Swift中的协议(Protocol)是什么?它在面向对象编程中有什么作用? 6. 在Swift中如何处理错误(Error Handling)?请描述在Swift中的错误处理机制。 7. Swift中的属性观察器(Property Observer)是用来做什么的...
协议缓冲区目前支持在 Java、Python、Objective-C 和 C++ 中生成的代码。 使用我们新的 proto3 语言版本,您还可以使用 Dart、Go、Ruby 和 C#,以及更多的语言。 proto 包提供了操作 protobuf 消息的功能,例如克隆...
集成了一些常用的第三方插件,使用方便,快速入门其中Objective-C部分大多数类库,出自StrongX大神视频中,大家可以去网站学习原汁原味:####一、swift部分1. Alamofire用HttpRequest对Alamofire进行了二次封装。...
指标逻辑针对协议编程(Protocol Oriented Programming),可以为所欲为的扩展指针效果; 提供更加全面的丰富效果,几乎支持所有主流APP效果; 使用子类化管理单元样式,逻辑更清晰,扩展更简单; 列表支持整个生命...
其客户端提供Objective-C、Java接口,服务器侧则有Java、Golang、C++等接口,从而为移动端(iOS/Androi)到服务器端通讯提供了一种解决方案。 当然在当下的环境下,这种解决方案更热门的方式是RESTFull API接口。该...
NNPopObjc受面向协议编程的启发,它为协议提供了可扩展性。 文件资料 阅读文档。 快速开始 宣告Procotol 在.h文件中声明Procotol @protocol NNDemoProtocol @optional - ( void ) sayHelloPop ; + ( void ) ...
OBJECTIVE OF THE SPECIFICATION............................................................................... 23 DOCUMENT ORGANIZATION....................................................................
xcode6.1 编译1、点击菜单自定切换内容页面2、滑动内容页面菜单自动剧中3、用户只需要关注菜单的展示和页面的展示就行了Objetive-C下面是协议:/** @brief TopTabControl datasource 需要支持的协议 */@protocol ...
iOS网络诊断SDK ...将SDK头文件导入到项目中: #import 另外,您需要将-lc++ ,- -ObjC , $(inherited) -ObjC到项目的Build Setting > other link flags 。 如下所示: ping [[PhoneNetManage
查询 cquery是用于C / C ++ / Objective-C的高度可扩展的低延迟语言服务器。 它已针对等大型代码库进行了测试和设计。 cquery提供准确而快速的语义分析,而不会中断工作流。 cquery几乎实现了整个语言服务器协议,并...
上下文菜单.iOS您可以轻松地向您的应用程序添加很棒的动画上下文菜单... 你的自定义单元应该实现 YALContextMenuCell 协议 @protocol YALContextMenuCell < NSObject>- (UIView *) animatedIcon ;- (UIView *) animate