Cocoa Touch中代理和控制器的责任是什么?

14

我是iPhone开发的新手。几乎每个示例项目(以及默认的项目模板)都有一个或多个委托和控制器。能否有人给我解释一下,委托负责什么,控制器应该做什么?

2个回答

11

我能想到的最简单的区分两者的方式如下:

  • Delegate是一个协议(接口),它定义了一个对象为了接收来自其他对象的特定消息而实现的方法。Delegate对象通常用于接收异步回调,例如用户输入、I/O等。
  • 控制器是一个对象,通常包含UI元素(视图、控件等)和数据,并且会向其中的各个对象发送和接收消息。在许多情况下,控制器本身就是一个Delegate,并且可以实现多个Delegate协议以从多个对象中接收事件。

请记住,许多UI元素和控件允许您通过将它们连接到Interface Builder中的IBAction方法来将事件传递回控制器。这非常方便,因为不需要编写额外的代码来实现Delegate。但是,某些其他API(例如ABPeoplePickerNavigationController或NSURLConnection)在Interface Builder中没有可视化界面,因此必须使用Delegate来处理其事件。


4

代理是一种实现一组方法的对象,您的应用程序或链接的框架依赖这些方法来实现功能。它是实现委托设计模式的一种方式,其中执行操作的责任从某个根源转移到感兴趣的第三方。例如,UIApplication有代理方法,使第三方能够在应用程序生命周期的某些时间执行操作。它可以被看作是时间线上的一个里程碑,您可以为其贡献内容。

控制器则是完全不同的东西,负责进行控制。ViewController负责管理视图 - 在需要时将其从磁盘加载到内存中,并在不需要时卸载它们。他们将内容从某些基础模型对象转换为可由您的视图对象使用的形式,从磁盘或互联网加载内容到您的内存模型中,以及在保存和/或退出时将内容转储回磁盘。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接