【问题标题】:Difference between AppDelegate.m and View Controller.mAppDelegate.m 和 View Controller.m 的区别
【发布时间】:2011-05-19 17:33:50
【问题描述】:

谁能告诉我在 iPhone 编程过程中何时使用 AppDelegate.m 和 AppDelegate.h?我只使用 ViewController.m 和 ViewController.h 进行基本学习。我只想知道何时以及为何使用 AppDelegate。

【问题讨论】:

    标签: iphone objective-c xcode delegates viewcontroller


    【解决方案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文件中。
      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      相关资源
      最近更新 更多