委托是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
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/CommunicateWithObjects.html#//apple_ref/doc/uid/TP40002974-CH7-SW18
- 大小: 18 KB
分享到:
相关推荐
在iPhone开发中,`delegate`机制常见于视图控制器(`UIViewController`)与视图(`UIView`)、用户界面元素(如`UIButton`、`UITableView`)以及其他组件之间的交互。例如,一个`UITableView`的`delegate`可以监听...
在iOS开发中,委托模式(Delegate Pattern)是一种常见的设计模式,用于实现对象间的通信和协作。在本案例中,我们通过分析iPhone的源码样例,可以看到如何在两个UIViewController之间使用委托模式进行交互。 首先...
本教程将深入探讨iPhone开发的基础知识,主要基于Apple的Swift编程语言,这是iOS应用开发的首选语言。源代码的提供旨在帮助初学者更好地理解理论知识的实际应用。 一、Swift编程语言 Swift是由Apple在2014年发布的...
在iOS开发中,特别是在使用Objective-C或Swift进行iPhone应用开发时,"委托"(Delegate)是一种常见的设计模式,用于在不同视图控制器之间传递数据。委托机制允许一个对象(委托者)通知另一个对象(委托对象)某些...
在iOS开发中,`delegate`模式是一种常见的通信方式,它允许对象之间进行单向通信,通常用于一个对象(委托者)向另一个对象(代理)发送通知或请求处理某些任务。`Delegate`机制是iOS设计模式的基础,广泛应用于...
它们在数据绑定和观察者模式中非常有用。 5. ** Blocks**:Objective-C中的Blocks是内联函数,可作为参数传递,存储在变量中。它们用于异步编程,如GCD(Grand Central Dispatch)或处理数组。 6. **内存管理**:...
林本杰分享的内容涉及了 Delegate、Observer、Block、UI、数据库设计等多个方面,旨在帮助开发者理解在iPhone开发中如何做出更优的选择。 首先,林本杰提出了“Delegate还是Observer”的问题。在iOS开发中,委托...
此外,委托模式(Delegate)是iOS编程中常用的设计模式,用于对象间通信,例如UIViewController与其子视图之间的通信。 通过深入研究这个压缩包中的代码和资源,你将能够逐步掌握iPhone应用开发的基本技能,从而迈...
### iPhone开发面试题详解 #### 一、指针与数组的理解 **题目1:** ```c main() { int a[5] = {1, 2, 3, 4, 5}; int *ptr = (int *)(&a + 1); printf("%d,%d", *(a + 1), *(ptr - 1)); } ``` **答案:** 2,5 *...
1. **委托(Delegate)**:这是一种设计模式,用于对象间的通信,让一个对象能够接收另一个对象的通知或请求。 2. **自定义Cell**:在UITableView中,你可以自定义Cell的布局和内容,以适应特定的数据展示需求。 3. ...
在iOS开发中,理解和掌握委托模式(Delegate Pattern)及应用的生命周期管理是至关重要的。通过本篇文档,我们将深入探讨`UIApplicationDelegate`协议及其在应用程序生命周期管理中的作用。本文将详细介绍如何加载...
【Iphone基础面试题资料.pdf】的文档涵盖了多个iOS开发中的基础知识点,主要涉及Objective-C语言、内存管理、设计模式以及Cocoa Touch框架的应用。以下是这些知识点的详细说明: 1. 插入排序:插入排序是一种简单...
"Delegate"是iOS编程中的一种设计模式,它允许一个对象(委托对象)处理另一个对象(委托者)的某些事件或行为。在iOS中,delegate通常用于实现控件间的通信,例如UITableView的代理方法可以处理表格的显示和用户...
在这种情况下,可以使用触摸委托(Touch Delegate)模式,通过设置`delgate`属性来传递事件处理。 综上所述,斯坦福大学的这堂课程将深入探讨如何在iOS应用中利用多点触控事件和手势识别,使开发者能够创建更加动态...
3. **代理模式(Delegate)**:许多UIKit组件支持委托协议,通过实现特定方法来响应用户操作或更新视图状态。 4. **通知(Notification)**:UIKit允许应用订阅和发布通知,以便在特定事件发生时进行通信。 5. **...
委托模式的接口实现 题目要求编写一个包含委托方法的接口: ```objective-c @protocol MyDelegate - (void)didJobs:(NSArray *)args; @end @interface MyClass : NSObject @property (nonatomic, assign) id...
另外,它也会涉及一些iOS开发中常用的高级概念,比如对象的初始化、字符串、数组和字典的操作、属性的使用、类别(Categories)、协议(Protocols)、委托(Delegate)模式等。 从内容部分可以提取出,该教程适合...
委托模式是iOS编程中常用的设计模式,用于对象间的通信和事件传递。 以上是iOS开发面试中涉及的一些核心知识点,包括指针运算、数组与内存、内存管理、预处理器宏和面向协议的编程。理解和掌握这些概念对于iOS...