理解iphone开发中的delegate(委托)
来源:互联网 发布:深红累之渊 知乎 编辑:程序博客网 时间:2024/06/01 08:09
委托是Cocoa中最简单、最灵活的模式之一。委托是指给一个对象提供机会对另一个对象中的变化做出反应或者影响另一个对象的行为。其基本思想是:两个对象协同解决问题。一个对象非常普通,并且打算在广泛的情形中重用。它存储指向另一个对象(即它的委托)的引用,并在关键时刻给委托发消息。消息可能只是通知委托发生了某件事情,给委托提供机会执行额外的处理,或者消息可能要求委托提供一些关键的信息以控制所发生的事情。
委托方法通常包括3种动词:should、will、did。
should表示一个动作发生前,通常带有返回值,可以在动作发生之前改变对象状态。
will在动作发生前,委托可以对动作做出响应,但不带有返回值。
did在动作发生后做出的响应。
从方法的定义我们不难看出委托模式能够起到两方面的作用:
第一:委托协助对象主体完成某项操作,将需要定制化的操作通过委托对象来自定义实现,达到和子类化对象主体同样的作用。
第二:事件监听,委托对象监听对象主体的某些重要事件,对事件做出具体响应或广播事件交给需要作出响应的对象。
个人理解采用委托模式的好处在于:
1、避免子类化带来的过多的子类以及子类与父类的耦合
2、通过委托传递消息机制实现分层解耦
委托模式的实现思路:
1、通常是在对象主体包含一个委托对象的弱引用:
- @interface
A : NSObject - {
-
IBOutlet id delegate; - }
-
- -(id)
delegate; - -(void)
setDelegate:(id)obj;
2、委托对象的实现有两种方式:正式协议和非正式协议,对象主体在协议中定义委托方法,委托对象可以选择实现其中某些委托方法,因此如果通过正式协议定义委托方法需要使用@option。
- @protocol
NSSearchDelegate - @option
- -(void)didSearchFinish:(*NSNotification)
aNotification; - @end
注:@option 可选@required 必须实现
3、连接对象主体和委托,无非就是通过setDelegate:(id)obj来实现。
4、触发委托方法。
参考:
http://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html
http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects
- 理解iphone开发中的delegate(委托)
- 深入理解iphone开发中的delegate
- 深入理解iphone开发中的delegate
- 深入理解iphone开发中的delegate
- iphone开发中的delegate的理解一
- iPhone开发之Delegate(代理、委托)的理解和使用
- iPhone开发之Delegate(代理、委托)的理解和使用
- iphone中的delegate委托机制
- (6) iphone 开发 真正理解委托(delegate)与数据源(data source)
- iphone开发中的delegate
- 深入理解iphone开发中的delegate by hennychen
- C#中的Predicate 理解 及 delegate 委托
- C#中的委托(Delegate)
- .net中的委托(Delegate)
- IOS开发(37)之iphone开发中的delegate
- delegate委托的理解
- IOS - 理解委托 - delegate
- 从callback的角度来理解.NET/C# 中的 委托 (delegate)与 事件 (event)
- Cocoa程序支持多国语言环境
- Xib文件创建UITableViewCell
- FAT32学习笔记(二)——spec
- iphone开发中使用动态库(dylib)和…
- Hibernate重点知识笔记-必看
- 理解iphone开发中的delegate(委托)
- AVOS Cloud 技术支持系统开源了
- BW Query变量增强(时间及文本)
- IPhone数据库操作代码例子
- xCode4设置NSZombieEnabled
- 纠错感言-无语的缓存
- NSSET and NSArray
- Lucene简单示例详解
- 软件工程实训教程网址