【问题标题】:What is the AppDelegate for and how do I know when to use it?AppDelegate 的用途是什么,我如何知道何时使用它?
【发布时间】:2010-10-13 17:45:54
【问题描述】:

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

【问题讨论】:

    标签: ios objective-c cocoa-touch


    【解决方案1】:

    @Shivam,谢谢。

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

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

    【讨论】:

    • Android 的onPauseonCreateonDestroy 方法更类似于iOS 视图控制器生命周期的viewDidDisappearviewDidLoad 方法。如果非要比较的话,我会说 Android 的 Application 类更接近 iOS 的 AppDelegate
    • 谢谢,如果你能改进我的回答,请做。看完你的回答,我会删除我的答案。
    【解决方案2】:

    希望这会有所帮助...

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

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

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

    【讨论】:

    • 请有人让我理解上面的答案有什么问题
    • 这似乎很困惑,因为 a) 你没有使用正确的标点符号/拼写/语法,b) 它是题外话,因为它并没有真正回答原始发帖人提出的问题。
    【解决方案3】:

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

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

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

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

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

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

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

    【讨论】:

    • +1 这是一个很好的答案。我正在查看一些示例代码,这些示例代码让子视图调用 appDelegate 来指示视图控制器切换到不同的子视图,这感觉就像是代码异味。很高兴知道我的鼻子还能用。
    • 有时我们会在在线教程中看到这样的内容:AppDelegate* del = [AppDelegate sharedAppDelegate]; (见developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…)这是什么意思?我可以看到使用它的例子,但我并不真正理解它背后的理论(见这个例子:developer.apple.com/library/ios/#samplecode/…
    【解决方案4】:

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

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

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

    【讨论】:

    • 我给你 +1 是因为在 AppDelegate 中拥有你所有的 UI 控制器比为它创建所有这些自定义类更容易。
    • @rwols 小心,分离您的关注点有助于代码更简洁,调试也更轻松,您应该花时间创建这些自定义类,而不是将所有观察者放在一个文件中.
    猜你喜欢
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2020-11-13
    相关资源
    最近更新 更多