我刚开始研究iPhone应用程序。我怎么知道什么时候应该把东西放在AppDelegate而不是自定义类?是否有一种规则或任何类型的类比与使用类似AppDelegate的模式的其他编程语言(如Python或PHP)?
答案 0 :(得分:237)
我通常会避免安德鲁使用术语“应用程序的核心”所暗示的设计方法。我的意思是,我认为你应该避免在中心位置混淆太多东西 - 良好的程序设计通常涉及将功能分离为“关注领域”。
委托对象是一个对象,当它连接的对象到达某些事件或状态时会收到通知。在这种情况下,Application Delegate是一个对象,它在UIApplication对象到达某些状态时接收通知。在许多方面,它是一种专门的一对一观察者模式。
这意味着AppDelegate的“关注区域”正在处理特殊的UIApplication状态。其中最重要的是:
你应该避免在AppDelegate中加入其他功能,因为它们并不真正属于那里。这样的其他功能包括:
很多人将这些东西归咎于他们的AppDelegate因为他们很懒或者他们认为AppDelegate控制着整个程序。您应该避免集中在您的AppDelegate中,因为它会混淆应用程序中的关注区域并且无法扩展。
答案 1 :(得分:24)
您的申请代表是您申请的核心。它实际上是你的“程序控制器”。
Application Delegate是接收应用程序级消息的类,包括最常用于启动其他视图创建的applicationDidFinishLaunching消息。
虽然不完全相似,但您可以将其视为Cocoa程序的“main()”例程。
答案 2 :(得分:2)
@Shivam,谢谢。
根据我对appDelegate
的理解,与Application
在Android中的内容非常接近。 viewDidLoad
,viewDidDisappear
可与Android的生命周期相媲美。每个应用程序都有一个生命周期,从启动到中断呼叫,到显示通知。如果您需要代码在发生这些system
事件时执行某些特殊操作,那么您需要编写方法代码。
在Android中,我们使用onPause
,onDestroy
,onCreate
类型的回调方法来处理此类系统事件。
答案 3 :(得分:1)
希望这会有所帮助...
对这种语言不熟悉的程序员总是有同样的问题 - 程序是从主方法开始的吗?是的,在这种情况下你是对的; IOS应用程序也从主方法开始。
您的主类调用以下函数:
UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
UIApplicationMain启动Cocoa Touch运行循环和应用程序基础架构,创建UIApplication
对象。我们的应用程序需要内容,所以objective-c使用委托来处理这个问题。这就是我们称之为AppDelegate(充当UIApplication
的代表)的原因。我们实现了该委托的一些可选方法,并且它的行为相应。