委托责任

1.问题

你有两个对象,一个需要在另一个状态变化时得到通知,另外,其中的一个对象希望在运行时让另一个对象负责确定行为变化。

2.解决方案

委托模式定义了一种解决方案,其中一个对象保存另一个对象的引用。被引用的对象实现了事先确定的借口,该接口用于将引用对象中发生的变化通知给被引用对象。该模式不仅可以将引用对象中的变化通知给引用对象,同时它也可以用于将责任委托给被引用对象,活在运行时代替引用对象进行决策。

比如: 给定 Foo 和 Bar 两个对象,Foo 可能现则讲责任委托给 Bar ,以确定在错误发生时如何处理。当错误发生时, Foo 对象告诉它的委托 Bar 错误发生了, Bar就有机会介入。

在Objective-C中实现委托模式包括

1.创建一个定义委托接口的协议

2.创建一个实现了协议的委托对象

3.并在委托对象内包括一个被委托对象的引用

代码显示了协议和委托对象实现的示例,本例中,MyClass是将责任委托给被委托对象的类。委托的协议称为MyClassDelegate

Objective-C
@protocol MyClassDelegate
- (void)requiredMethod;

@optional
- (void)somethingOptional;

@end

@interface MyClass
{
     id<MyClassDelegate> delegate;
}
@property (assign) id<MyClassDelegate> delegate;
@end

可以看出,MyClass实例保存一个委托的应用,委托需要实现MyClassDelegate协议。

为此,需要将MyClass的委托对象事先设置成一个实现了委托协议的对象实例。一个很重要的警告就是在Objective-C中使用委托时,委托必须指定成分配属性,这样就不会被保存了。这样做可以在被委托对象可能创建委托对象的情况下防止循环引用。如果委托对象保存被委托对象,那么这样循环引用会导致任何一个对象都不会被释放。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值