2012-07-10 80 views

回答

1

从苹果公司的Concepts in Objective-C Programming文件:

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

为了更好地理解委派的值,它有助于考虑一个 关闭的,现成的可可对象,诸如文本字段( 的NSTextField或的UITextField的一个实例)或表视图( NSTableView的或的一个实例UITableView)。这些对象旨在以通用方式履行特定角色;例如,AppKit 框架中的窗口对象响应其控件的鼠标操作,并处理诸如关闭,调整大小和移动物理窗口等操作。这种限制性和通用行为必然会限制对象可以知道事件如何影响(或将影响)应用程序中其他位置的内容,尤其是当受影响的行为特定于您的应用程序时。委托为 提供了一种方法,使您的自定义对象能够将应用程序特定的 行为传达给现成的对象。

委托的编程机制为对象提供了一个机会来协调其外观和状态,并在程序中的其他位置发生更改 ,更改通常是由用户操作引起的。更重要的是,委托可以让一个对象改变另一个对象的行为,而不需要从它继承。代理几乎总是您的自定义对象之一,并且通过 定义,它包含了通用的 和委托对象不可能知道的应用程序特定的逻辑。

数据源

数据源相似,但代表,而不是被所述用户界面的 委派控制,它被委派 数据的控制。数据源是由NSView和UIView对象(如表视图和大纲视图)持有的插座,它们需要从中填充其可见数据行的源。视图的数据源通常是作为其委托的相同对象,但它可以是任何 对象。与代表一样,数据源必须实现一个或多个非正式协议的方法,以便为视图提供它所需的数据 ,并且在更高级的实现中,可以处理用户在这些视图中直接编辑的数据。

与代表一样,数据源也是必须存在的对象,以便从请求数据的对象接收消息。使用它们的应用程序 必须确保它们的持久性,如果在内存管理代码中需要 ,则保留它们。

数据源负责对象的持久性,它们将 交给用户界面对象。换句话说,他们是 负责这些对象的内存管理。但是,每当查看对象(如大纲视图或表视图)访问来自数据源的数据时,只要数据使用了 ,它就会保留这些对象。但它不会长时间使用这些数据。通常,它仅保留数据足够长的时间以显示数据。

相关问题