【问题标题】:What describes the Application Delegate best? How does it fit into the whole concept?什么最能描述应用程序委托?它如何融入整个概念?
【发布时间】:2010-10-24 03:37:06
【问题描述】:

我想知道 App Delegate 是做什么的。它有一些不错的方法,例如-applicationDidFinishLaunching,将在应用程序完成启动时调用,等等。但那实际上是什么?那是在UIApplicationMain 函数中实例化的某个对象吗?

我的应用程序中的每个类都可以访问该 App Delegate 对象是如何工作的?网上有什么好的图表可以可视化这些关系吗?

【问题讨论】:

    标签: ios delegates appdelegate uiapplicationdelegate uiapplication


    【解决方案1】:

    以这种方式实例化对象;

    主函数查找 info.plist 中设置的主 nib。笔尖作为应用程序委托设置为某个必须实现 UIApplicationDelegates 及其所需方法的类。然后应用委托加载一些视图控制器。

    它用作影响整个应用程序的事件的应用程序范围的回调对象,例如内存不足等。

    【讨论】:

      【解决方案2】:

      在 Cocoa 中,委托是另一个对象在行为问题上遵循的对象,并通知其状态的变化。例如,一个 UITableViewDelegate 负责回答有关 UITableView 在进行选择或重新排序时应该如何表现的问题。它是 UITableView 在想知道特定行的高度时询问的对象。在 Model-View-Controller 范式中,delegate 是 Controller,许多 delegate 的名字以“Controller”结尾。

      冒着明显的风险,UIApplicationDelegate 是 UIApplication 的委托。这种关系在 Cocoa (Mac) 中比在 Cocoa Touch (iPhone) 中更明显,因为 NSApplication 委托能够更直接地控制 NSApplication 的行为(例如防止应用程序终止)。 iPhone 不允许对 UIApplication 进行太多控制,因此大多数情况下 UIApplicationDelegate 被告知更改,而不是有一个积极的决策过程。

      UIApplicationDelegate 并非在应用程序的任何地方都严格可用。单例 UIApplication 是 ([UIApplication sharedApplication]),通过它你可以找到它的委托。但这并不意味着应用程序中的每个对象都适合直接与应用程序委托对话。一般来说,我不鼓励开发人员让随机对象与应用程序委托对话。大多数通过这种方式解决的问题都可以通过 Singleton、NSNotification 或其他委托对象更好地解决。

      就其创建而言,在 Mac 上,应用程序委托并没有什么神奇之处。在大多数情况下,它只是一个由 NIB 实例化和连接的对象。然而,在 iPhone 上,如果通过 UIApplicationMain() 实例化应用程序委托,可能会有点神奇。第四个参数是一个 NSString 表示应用程序委托的类,UIApplicationMain() 将创建一个并将其设置为 sharedApplication 的委托。这允许您在没有 NIB 的情况下设置委托(这在 Mac 上非常困难)。如果 UIApplicationMain() 的第四个参数为 nil(就像在 Apple 模板中一样),则委托由主 NIB 创建和连接,就像主窗口一样。

      【讨论】:

      • 感谢罗布的洞察力!确定你不是顶级苹果工程师? ;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2014-05-29
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      相关资源
      最近更新 更多