一、protocol基本使用
在Object-C中,Protocol被用来定义一组独立于具体类的属性和方法,其不具体实现这些方法,任何类都可以实现Protocol,Protocol可以继承另一个Protocol,从特征上看Protocol的作用类似于Java世界的接口。
1.基本用途
- 可以用来声明一大堆方法(不能声明成员变量)
- 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明
- 只要父类遵守了某个协议,就相当于子类也遵守了
2.格式
格式的编写:
@protocol 协议名称
// 方法声明列表
@end
@protocol MyProtocol <NSObject>
某个类遵守协议:同时一个协议可以遵守其他多个协议,多个协议之间用逗号 , 隔开。
一个协议遵守了其他协议,就相当于拥有了其他协议中的方法声明
@interface 类名 : 父类 <协议名称>
@end
@interface MyClass : NSObject <MyProtocol, AnotherProtocol, YetAnotherProtocol>
3.关键字
协议中有2个关键字可以控制方法是否要实现(默认是@required),在大多数情况下,用途在于程序员之间的交流。
@required:这个方法必须要实现(若不实现,编译器会发出警告)
@optional:这个方法不一定要实现
@protocol MyProtocol <NSObject>
- (void) test;// 默认是required必须实现
@required
- (void)test1;// 必须实现
@optional
- (void)test2;// 选择性实现
@end
4.基协议
- NSObject是一个基类,最根本最基本的类,任何其他类最终都要继承它
- 其实还有一个协议,名字也叫NSObject,它是一个基协议,最根本最基本的协议
- NSObject协议中声明很多最基本的方法,比如description、retain、release等
- 建议每个新的协议都要遵守NSObject协议
5.定义变量时指定协议
// NSObject类型的对象,并且要遵守NSCopying协议
NSObject<NSCopying> *obj;
// 任何OC对象,并且要遵守NSCoding协议
id<NSCoding> obj2;<strong>
</strong>
Apple官方文档是这样介绍的,代理是一种简单而功能强大的设计模式,这种模式用于一个对象“代表”另外一个对象和程序中其他的对象进行交互。 主对象(这里指的是delegating object)中维护一个代理(delegate)的引用并且在合适的时候向这个代理发送消息。这个消息通知“代理”主对象即将处理或是已经处理完了某一个事件。这个代理可以通过更新自己或是其它对象的UI界面或是其它状态来响应主对象所发送过来的这个事件的消息。或是在某些情况下能返回一个值来影响其它即将发生的事件该如何来处理。代理的主要价值是它可以让你容易的定制各种对象的行为。注意这里的代理是个名词,它本身是一个对象,这个对象是专门代表被代理对象来和程序中其他对象打交道的。
有些麻烦的事情不想自己亲自做,就可以找个人帮忙做,即交给代理对象去做。
2.设计原则
首先得拥有某个代理对象属性
其次要很清楚代理有哪些方法
最后要保证能解耦
3.实现方案
定义一个protocol,在其中声明一些和代理沟通的方法
拥有一个代理属性id<protocol>delegate
让代理遵守protocol