【发布时间】:2010-10-13 17:45:54
【问题描述】:
我刚刚开始开发 iPhone 应用程序。我怎么知道什么时候应该把东西放在 AppDelegate 和自定义类中?是否存在与另一种编程语言(如 Python 或 PHP)使用 AppDelegate 类似模式的规则或任何类型的类比?
【问题讨论】:
标签: ios objective-c cocoa-touch
我刚刚开始开发 iPhone 应用程序。我怎么知道什么时候应该把东西放在 AppDelegate 和自定义类中?是否存在与另一种编程语言(如 Python 或 PHP)使用 AppDelegate 类似模式的规则或任何类型的类比?
【问题讨论】:
标签: ios objective-c cocoa-touch
@Shivam,谢谢。
根据我对appDelegate 的理解,与Android 中的Application 接近。 viewDidLoad、viewDidDisappear 与 Android 的 Lifecycle 相当。每个应用程序都有一个生命周期,从启动到来电中断,再到显示通知。如果您需要您的代码在这些 system 事件发生时做一些特别的事情,那么您需要编写方法代码。
在 Android 中,我们使用 onPause、onDestroy、onCreate 有点回调方法来处理此类系统事件。
【讨论】:
onPause、onCreate 和onDestroy 方法更类似于iOS 视图控制器生命周期的viewDidDisappear、viewDidLoad 方法。如果非要比较的话,我会说 Android 的 Application 类更接近 iOS 的 AppDelegate。
希望这会有所帮助...
刚接触这种语言的程序员总是有同样的问题——程序是从 main 方法开始的吗?是的,在这种情况下你是对的; IOS 应用程序也是从一个 main 方法开始的。
您的主类调用以下函数:
UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
UIApplicationMain 启动 Cocoa Touch 运行循环和应用程序基础架构,它创建了一个 UIApplication 对象。我们的应用程序需要内容,因此objective-c 使用委托来处理它。这就是为什么我们称它为 AppDelegate(充当UIApplication 的代表)。我们实现了该委托的一些可选方法,它的行为也相应地。
【讨论】:
我通常会避免 Andrew 使用“应用程序的核心”一词所暗示的设计方法。我的意思是,我认为您应该避免将太多东西集中在一个中心位置——良好的程序设计通常涉及按“关注区域”分离功能。
委托对象是一个对象,当它所连接的对象达到某些事件或状态时,它会收到通知。在这种情况下,Application Delegate 是一个在 UIApplication 对象达到特定状态时接收通知的对象。在许多方面,它是一种专门的一对一观察者模式。
这意味着 AppDelegate 的“关注领域”正在处理特殊的 UIApplication 状态。其中最重要的是:
您应该避免将其他功能放在 AppDelegate 中,因为它们并不真正属于那里。此类其他功能包括:
许多人将这些东西混入他们的 AppDelegate 中,因为他们很懒,或者他们认为 AppDelegate 控制着整个程序。您应该避免在 AppDelegate 中集中化,因为它会混淆应用程序中的关注区域并且无法扩展。
【讨论】:
您的应用程序委托是您的应用程序的核心。它实际上是您的“程序控制器”。
Application Delegate 是接收应用级消息的类,包括最常用于启动其他视图创建的 applicationDidFinishLaunching 消息。
虽然不完全相似,但您可以将其视为 Cocoa 程序的“main()”例程。
【讨论】: