AppDelegate.m 和 View Controller.m 的区别
Posted
技术标签:
【中文标题】AppDelegate.m 和 View Controller.m 的区别【英文标题】:Difference between AppDelegate.m and View Controller.m 【发布时间】:2011-05-19 17:33:50 【问题描述】:谁能告诉我在 iPhone 编程过程中何时使用 AppDelegate.m 和 AppDelegate.h?我只使用 ViewController.m 和 ViewController.h 进行基本学习。我只想知道何时以及为何使用 AppDelegate。
【问题讨论】:
【参考方案1】:两者都定义了类,但这些类用于不同的事情。 ViewController.h/m 定义了一个管理视图层次结构的视图控制器类——基本上是应用程序的一个屏幕。您可能有多个屏幕,每个屏幕都有自己的视图控制器。
AppDelegate.h/m 定义了一个整体管理应用程序的类。应用程序将创建该类的一个实例并发送该对象消息,让委托在明确定义的时间影响应用程序的行为。例如,-application:didFinishLaunchingWithOptions: 在应用程序完成启动并准备好做一些有趣的事情时发送。查看UIApplicationDelegate reference page 以获取应用委托可以实施以修改应用行为的消息列表。
【讨论】:
【参考方案2】:我想在@Caleb 的回答中添加以下内容。
如果不小心,AppDelegate 很容易成为应用程序中访问最多的对象之一。我通常避免从我的任何 ViewController 调用 AppDelegate 中的方法。除非需要向 AppDelegate 报告会影响整个应用程序行为的内容。
我的 AppDelegate 用于以下用途:
初始化:在第一次启动时(安装或更新后)需要做的任何事情 从版本到版本的数据迁移(例如,如果您使用 CoreData 和迁移) 配置通过 MainWindow.xib 中的 IBOutlets 链接的对象 确定启动的初始方向 在应用程序终止或进入后台模式之前保存未提交的数据/状态 注册 Apple 推送通知服务并将设备令牌发送到我们的服务器 打开支持的应用程序 URL 之一(例如 maps://)有关其他用例场景和 AppDelegate 的更详尽描述,请参阅ios Application Programming Guide。
【讨论】:
+1 用于指出应用委托的危险。有些人用它来做各种各样的事情,主要是因为它是一个单例,因此很容易在全球范围内访问。我认为这不是一个好方法。【参考方案3】:视图控制器。 h/m 负责控制模型和视图之间的连接(更多关于 MVC here)。
AppDelegate。 h/m 负责应用程序的生命周期。当用户按下主页按钮并退出您的应用程序时该怎么办,当应用程序进入后台时该怎么办。诸如此类。
【讨论】:
说到生命周期,在不同的viewcontrollers
中声明应用需要使用的全局变量必须在AppDelegate
文件中。以上是关于AppDelegate.m 和 View Controller.m 的区别的主要内容,如果未能解决你的问题,请参考以下文章
将 AppDelegate.h 和 AppDelegate.m 替换为 AppDelegate.swift
AppDelegate.swift 如何在 Xcode 6.3 中替换 AppDelegate.h 和 AppDelegate.m