一、协议:
Objective-C中的协议(Protocol)类似于常用的接口,协议(Protocols)中定义的方法,在类中实现。协议(Protocol)通常用来实现委托对象(Delegate Object)。委托对象(Delegate Object)一般用来自己定义行为或者动作,也就是调用自己定义方法,但自己不实现该方法,委托其它的类来实现该方法。
1. 协议的声明:
HelloProtocol.h
#import <Foundation/Foundation.h>
@protocol HelloProtocol <NSObject>
- (void) requiredMethod;
@optional
- (void) optionalMethod1;
- (void) optionalMethod2;
@end
@required是缺省值,是必须实现的方法,@optional是可以选择的。协议只有一个.h文件,本身不是类,他是定义了一个其他类可实现的接口。
2. 协议的实现:
Person.h
#import <Foundation/Foundation.h>
#import "HelloProtocol.h"
@interface Person : NSObject <HelloProtocol>
@end
Person.m
#import "Person.h"
@implementation Person
- (void)requiredMethod{
NSLog(@"这是一个必须实现的方法");
}
- (void)optionalMethod1{
NSLog(@"这是一个可选的方法1");
}
- (void)optionalMethod2{
NSLog(@"这是一个可选的方法2");
}
@end
3. 用协议修饰变量
3.1 定义变量:
id<MyProtocolName>myNewVariable;
那么myNewVatiable是遵循我们定制的这个MyProtocolName协议的。
3.2 定义函数:
- (void) doSomethingWithThisObject: (id<MyprotocolName>) aObject
那么这个函数的参数是需要遵循我们定制的这个MyProtocolName协议的。
二、代理(委托)设计模式
- 简化了对象的行为,最小化了对象之间的耦合度。
- 使用代理,一般来说无需子类化。
- 简化了我们应用程序开发,既容易实现,有灵活。
@implementation
-(void)init
{
delegate = B;
}
-(void)FunToOther
{
[delegate Fun];//将消息发送给委托去处理
}
@end
@implementation
-(void)init
{
delegate = B;
}
-(void)FunToOther
{
[delegate Fun];//将消息发送给委托去处理
}
@end
委托对象的实现B.h---------------------------------------------
#import"A.h"
@interface B:NSObject<MyDelegate>
@end
B.m---------------------------------------------@implementation
-(void)fun
{
//实现Mydelegate中制定的方法
}
@end
这样的话A就可以委托B去做fun这件事情了。
例子参考:http://www.cnblogs.com/cokecoffe/archive/2012/05/05/2537109.html