0

可能重复:
数据源和委托之间有什么区别?

我是 iPhone 新手。我对什么是委托和数据源方法以及它们的作用感到困惑。有人可以向我解释这些差异吗?

4

1 回答 1

1

来自 Apple在 Objective-C 编程文档中的概念:

委托委托是一个对象,当该对象遇到程序中的事件时,该对象代表另一个对象或与该对象协作。委托对象通常是响应者对象——即从 AppKit 中的 NSResponder 或 UIKit 中的 UIResponder 继承的对象——它响应用户事件。委托是一个对象,它被委托控制该事件的用户界面,或者至少被要求以特定于应用程序的方式解释该事件。

为了更好地理解委托的价值,它有助于考虑一个现成的 Cocoa 对象,例如一个文本字段(NSTextField 或 UITextField 的实例)或表格视图(NSTableView 或 UITableView 的实例)。这些对象旨在以通用方式履行特定角色;例如,AppKit 框架中的窗口对象响应鼠标对其控件的操作并处理诸如关闭、调整大小和移动物理窗口之类的事情。这种受限和通用的行为必然会限制对象对事件如何影响(或将影响)应用程序其他地方的某些东西的了解,尤其是当受影响的行为特定于您的应用程序时。

委托的编程机制使对象有机会协调它们的外观和状态与程序中其他地方发生的变化,这些变化通常由用户操作带来。更重要的是,委托使一个对象可以改变另一个对象的行为,而无需从它继承。委托几乎总是您的自定义对象之一,根据定义,它包含通用和委托对象不可能知道的特定于应用程序的逻辑。

数据源

数据源类似于委托,不同之处在于,它不是被委托控制用户界面,而是被委托控制数据。数据源是由 NSView 和 UIView 对象(例如表视图和大纲视图)持有的出口,它们需要一个源来填充其可见数据行。视图的数据源通常是充当其委托的同一个对象,但它可以是任何对象。与委托一样,数据源必须实现一种或多种非正式协议的方法,以向视图提供所需的数据,并且在更高级的实现中,处理用户在此类视图中直接编辑的数据。

与委托一样,数据源是必须存在才能从请求数据的对象接收消息的对象。使用它们的应用程序必须确保它们的持久性,必要时将它们保留在内存管理代码中。

数据源负责将它们分发给用户界面对象的对象的持久性。换句话说,它们负责这些对象的内存管理。但是,每当诸如大纲视图或表格视图之类的视图对象从数据源访问数据时,只要它使用数据,它就会保留这些对象。但它不会使用很长时间的数据。通常它只保留数据足够长的时间来显示它。

于 2012-07-10T09:27:13.473 回答