Objective-C中的协议和代理(委托)设计模式

一、协议:  

       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协议的。

二、代理(委托)设计模式

      代理是指一个对象提供机会给另一个对象中的行为发生变化是做出的反应。基本思想是:两个对象协同解决问题,通常用于对象之间的通信。
代理设计模式的基本特点:
  • 简化了对象的行为,最小化了对象之间的耦合度。
  • 使用代理,一般来说无需子类化。
  • 简化了我们应用程序开发,既容易实现,有灵活。
例子:
A.h------------------------------------------------
@implementation

-(void)init

{
    delegate = B;
}

-(void)FunToOther

{
    [delegate Fun];//将消息发送给委托去处理
}

@end
A.m---------------------------------------------
@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这件事情了。
        UIApplication类就是一个典型的例子。UIApplication类中定义了一个应用程序应有的行为或者动作。而不是强制让你的UIApplication子类去接受当前应用程序的状态消息并做出相应处理。UIApplication类通过调用特殊的方法,来传递这些消息给它的委托对象。这个委托对象通过实现名为UIApplicationDelegate的协议(Protocol),之后就可以接受到当前应用程序的状态消息并做出相应处理。比如内存不够的错误,应用程序被中断等重要消息。

例子参考:http://www.cnblogs.com/cokecoffe/archive/2012/05/05/2537109.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值