协议的声明看起来类似一个类的接口,不同的是协议没有父类也不能定义实例变量。协议是一种特殊的程序设计结构,用于声明专门被别的类实现的方法。协议在以下场合非常有用:
(1)需要由别的类实现的方法;
(2)声明未知类的接口;
(3)两个类之间的通信;
协议的基本特点:
(1)协议可以被任何类实现的方法;
(2)协议本身不是类,它是定义了一个其他类可以实现的接口;
(3)类别也可以采用协议;
协议中的关键字
(1)required:表示必须强制实现的方法;
(2)optional:表示可以有选择性的实现方法;
我在前面一篇博客《iOS开发设计模式详解》中谈到了iOS中最常用的设计模式。当我们谈到协议,那就不得不提到代理设计模式。协议让代理设计模式成为iOS的热门模式。首先因为OC是一门单继承的语言,iOS开发中用的也是单继承。那就不得不使用代理设计模式来弥补这种小小的“缺陷”。
代理设计模式的基本概念:
代理是指一个对象提供机会对另一个对象中的行为发生变化时做出的反应。如,当你将一颗石子(对象1)丢入水中(行为发生变化,之前可能在你的手中)时,水面(对象2)泛起波纹(做出的反应)。总而言之,基本思想就是:两个对象协同解决问题,通常用于对象之前的通信。
代理设计模式的基本特点:
(1)简化了对象的行为,最小化了对象之间的耦合度;
(2)使用代理,一般来说无需子类化;
(3)简化了应用程序开发,既容易实现,又灵活;
我们通过代码来实现一下Protocol:
(1)直接新建一个Protocol,命名为HelloProtocol,然后就只会生成一个HelloProtocol.h文件,注意肯定没有.m文件,协议只是用来声明方法,并不是来实现的。
#import <Foundation/Foundation.h> @protocol HelloProtocol <NSObject> //默认就是required; @required - (void)requiredMethod; @optional - (void)optionalMethod; @end
#import <Foundation/Foundation.h> #import "HelloProtocol.h" @interface Person : NSObject<HelloProtocol> @end
#import "Person.h" @implementation Person - (void)requiredMethod{ NSLog(@"requiredMethod——必须实现的方法"); } - (void)optionalMethod{ NSLog(@"optionalMethod——选择实现的方法"); } @end
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *jack = [[Person alloc] init]; [jack requiredMethod]; [jack optionalMethod]; } return 0; }
。
github主页:https://github.com/chenyufeng1991 。欢迎大家访问!
版权声明:本文为博主原创文章,未经博主允许不得转载。
Objective-C——协议(Protocol)详解与代理(委托)设计模式
原文:http://blog.csdn.net/chenyufeng1991/article/details/49679725