繁体   English   中英

AppDelegate 的用途是什么,我如何知道何时使用它?

[英]What is the AppDelegate for and how do I know when to use it?

我刚刚开始使用 iPhone 应用程序。 我怎么知道什么时候应该把东西放在 AppDelegate 和自定义 class 中? 是否存在与另一种编程语言(如 Python 或 PHP)使用 AppDelegate 类似模式的规则或任何类型的类比?

我通常会避免 Andrew 使用“应用程序的核心”一词所暗示的设计方法。 我的意思是,我认为您应该避免将太多东西集中在一个中心位置——好的程序设计通常涉及按“关注区域”分离功能。

委托 object 是一个 object,当它连接到的 object 达到某些事件或状态时,它会收到通知。 在这种情况下,Application Delegate 是一个 object,它在 UIApplication object 达到特定状态时接收通知。 在许多方面,它是一种专门的一对一观察者模式。

这意味着 AppDelegate 的“关注领域”正在处理特殊的 UIApplication 状态。 其中最重要的是:

  • applicationDidFinishLaunching: - 适合处理启动配置和构建
  • applicationWillTerminate: - 适合最后清理

您应该避免将其他功能放在 AppDelegate 中,因为它们并不真正属于那里。 此类其他功能包括:

  • 文档数据——您应该有文档管理器 singleton(用于多文档应用程序)或文档 singleton(用于单文档应用程序)
  • 按钮/表格/视图控制器、视图委托方法或其他视图处理(除了在 applicationDidFinishLaunching 中构建顶级视图:)——这项工作应该在各自的视图 controller 类中。

许多人将这些东西混入他们的 AppDelegate 是因为他们很懒,或者他们认为 AppDelegate 控制着整个程序。 你应该避免集中在你的 AppDelegate 中,因为它混淆了应用程序中的关注区域并且无法扩展。

您的应用程序委托是您的应用程序的核心。 它实际上是您的“程序控制器”。

Application Delegate 是 class 接收应用程序级消息,包括最常用于启动其他视图创建的 applicationDidFinishLaunching 消息。

虽然不完全相似,但您可以将其视为 Cocoa 程序的“main()”例程。

@Shivam,谢谢。

根据我对appDelegate的了解,它与 Android 中的Application非常接近。 viewDidLoadviewDidDisappear和 Android 的 Lifecycle 差不多。 每个应用程序都有一个生命周期,从启动到来电中断,再到显示通知。 如果您需要您的代码在这些system事件发生时做一些特殊的事情,那么您需要编写方法代码。

在 Android 中,我们使用onPauseonDestroyonCreate等回调方法来处理此类系统事件。

希望这会有所帮助...

刚接触这种语言的程序员总是有同样的问题——程序是从 main 方法开始的吗? 是的,在这种情况下你是对的; IOS 应用程序也从 main 方法开始。
您的主要 class 调用以下 function:

 UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

UIApplicationMain 启动 Cocoa Touch 运行循环和应用程序基础设施,创建UIApplication object。 我们的应用程序需要内容,因此 objective-c 使用委托来处理这个问题。 这就是为什么我们称它为 AppDelegate (充当UIApplication的代表)。 我们实现了该委托的一些可选方法,并且它的行为相应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM