当前位置:  开发笔记 > 编程语言 > 正文

什么是AppDelegate以及如何知道何时使用它?

如何解决《什么是AppDelegate以及如何知道何时使用它?》经验,为你挑选了2个好方法。

我刚刚开始研究iPhone应用程序.我怎么知道什么时候应该把东西放在AppDelegate而不是自定义类?是否有一种规则或任何类型的类比使用像Python或PHP这样的其他编程语言使用类似AppDelegate的模式?



1> Matt Gallagh..:

我通常会避免安德鲁使用术语"应用程序的核心"所暗示的设计方法.我的意思是,我认为你应该避免在中心位置混淆太多东西 - 良好的程序设计通常涉及通过"关注领域"分离功能.

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

这意味着AppDelegate的"关注区域"正在处理特殊的UIApplication状态.其中最重要的是:

applicationDidFinishLaunching: - 适合处理启动配置和构造

applicationWillTerminate: - 最后清理好

你应该避免在AppDelegate中放置其他功能,因为它们并不真正属于那里.这样的其他功能包括:

文档数据 - 您应该有一个文档管理器单例(用于多个文档应用程序)或文档单例(用于单个文档应用程序)

按钮/表/视图控制器,查看委托方法或其他视图处理(在applicationDidFinishLaunching中构建顶级视图除外) - 此工作应位于各自的视图控制器类中.

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


+1这是一个很好的答案.我正在查看一些示例代码,其中子视图调用appDelegate来指示视图控制器切换到不同的子视图,这感觉就像代码味道.很高兴知道我的鼻子仍然有效.
有时候我们会在网上的教程中看到类似的内容:AppDelegate*del = [AppDelegate sharedAppDelegate]; (参见http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW3)这是什么意思?我可以看到使用它的例子,但我并不真正理解它背后的理论(参见这个例子:http://developer.apple.com/library/ios/#samplecode/SimpleURLConnections/Introduction/Intro.html)

2> Andrew Grant..:

您的应用程序代表是您的应用程序的核心.它实际上是你的"程序控制器".

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

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


@rwols要小心,将你的关注点分开有助于更清晰的代码并且调试不那么麻烦,你应该花时间创建那些自定义类而不是将所有观察者都放在一个文件中.
推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有