代表团,代码的一些例子?对象如何委托给其他人

时间:2009-09-21 23:03:19

标签: iphone cocoa-touch delegation

我希望对代表团有更好的了解。有人可以粘贴一个好的代码示例代码并解释它是如何工作的吗?

5 个答案:

答案 0 :(得分:1)

有一个很好的例子:http://en.wikipedia.org/wiki/Delegation_pattern#Objective-C_example

在此示例中,MyCoolAppController创建了TCScrollView类型的对象,并将TCScrollView的“委托”属性设置为self。这意味着当TCScrollView调用

[delegate scrollView:self shouldScrollToPoint:to]

它要求MyCoolAppController(TCScrollView的委托)执行一些计算并查看是否可以滚动。您可以说“MyCoolAppControllerTCScrollView的代表”来描述这一点; TCScrollView要求MyCoolAppController代表其做一些工作。

答案 1 :(得分:0)

您的意思是.NET或Java还是其他语言委托?

答案 2 :(得分:0)

.NET术语中的委托只不过是一个函数指针,换句话说是一个指向可执行代码块的变量。它们可以以各种方式使用。一种方法是在事件的上下文中使用它们。假设您有一个ASP.NET页面,并且您正在使用MVP(该页面上的模型视图Presenter模式)。您希望您的演示者收到有关视图上保存按钮的单击事件的通知。您可以在视图界面上定义事件,但是为了订阅该事件并对其执行操作,您需要注册在引发事件时触发的方法。例如:

public class ClassThatRegistersForEvent
{
   public void InitializeView(IView view)
   {
      view.SaveButtonClickedEvent += delegate{
                                        // do stuff in here when the event is raised
                                     }
   }
}
public interface IView
{
  event System.EventHandler SaveButtonClickedEvent;
}

答案 3 :(得分:0)

这是我写的解释代表团的答案:https://stackoverflow.com/questions/1089737#1090170

答案 4 :(得分:0)

委托是一种回应事件的方式。在其他语言中,您可能会通过子类化来完成此操作。例如,假设您有一个表格视图。您可以继承tableview并覆盖tableView:didSelectRowAtIndexPath:方法,但这会变得混乱并创建一个不必要的子类(以及它不可重用的事实)相反,您创建一个TableViewDelegate类并告诉您的表视图(tableView 。代表)。这样,当事情发生时,该方法将自动被调用。这是一个非常干净的事件处理解决方案。

在您编写了一些涉及代表的应用程序(表格视图很重要)之后,您就可以了解它。