AppDelegate 应该做多少?

Posted

技术标签:

【中文标题】AppDelegate 应该做多少?【英文标题】:How much should the AppDelegate do? 【发布时间】:2010-05-19 00:42:34 【问题描述】:

我正在设计一个相当大的应用程序,并且在启动时它将与几个不同的服务器创建会话。因为他们正在创建一个在应用程序的所有部分中使用的会话,所以我认为这在 App Delegate 中是最好的。

但问题是我需要在屏幕上显示会话进度。我计划在主菜单的底部有一个 UIToolBar,我不想用进度条覆盖它,而是覆盖它上面的 UIView。所以我看到它的方式我可以用几种不同的方式来做。

1) 让 App Delegate 建立会话并将进度报告给主菜单类,以便它可以在进度栏中表示它(如果会话是在单独的线程中创建的,这样做会有什么问题吗?),

2) 让 App 委托显示主菜单(带有一堆按钮和 UIToolBar 的 UIView)并让它跟踪和显示进度(我从未在 App Delegate 中显示任何内容,但假设您可以这样做,但事实并非如此推荐)或

3) 让 App Delegate 只需按下主菜单并让 mainMenu 类创建会话并显示进度条。

4) 我认为另一种方法是在委托类中创建会话并将委托设置为 mainMenu 而不是 self (AppDelegate),尽管我从未使用过 self 以外的任何东西,所以不确定是否这将起作用,或者如果我能够关闭线程(通过调用 super 可能?),因为它在 AppDelegate 而不是类的委托中运行。

正如我之前所说的,会话是在一个单独的线程中的一个类中创建的,因此它不会锁定 UI,我认为最好的方法是第一种,但我会遇到问题让它在单独的线程中运行线程,向应用委托报告,然后将该消息发送到 mainMenu 视图?

我希望一切都有意义,如果您需要任何进一步的说明,请告诉我。任何信息表示赞赏

干杯,

【问题讨论】:

【参考方案1】:

大概连接状态会影响您应用的功能。我可能会考虑一个连接管理器对象,它能够启动连接、维护它们的状态并在询问它们的状态时做出响应。就像单例对象将返回现有对象或创建并返回不存在的新对象一样,连接管理器甚至不需要“建立连接”方法,只需“获取句柄” - 如果连接不存在打开它可以尝试使其如此。

您还提到必须在主屏幕上报告状态。在后台拥有一个能够执行不确定时间任务的管理器对象(打开与可能准备好、忙碌、远离或只是完全断开的主机的连接),然后向主线程报告进度,以便 UI 可以更新(请记住,辅助线程中没有 UIKit 访问)似乎很理想,它也使您的视图与众不同。

【讨论】:

抱歉,如果我错过了您所写的内容,但您是说像单身人士一样作为启动会话的连接管理器? 我只是说它就像一个单例,在返回指向自身的指针之前检查它是否存在。在这种情况下,它会检查连接的状态,并可能在返回连接句柄以供程序的其他部分使用之前启动连接。通过抽象连接状态和过程,您可以让自己更轻松,并提供“关闭所有连接”等方便的功能。 嗯,很有趣。我想你是对的。我会去设计它,看看我是否遇到任何问题。可能会看看其他人是否参与了这个问题

以上是关于AppDelegate 应该做多少?的主要内容,如果未能解决你的问题,请参考以下文章

AppDelegate 类型 var 不是成员,除非在 func 中(见图)

AppDelegate 类型的值没有成员 managedObjectContext

从 appdelegate 更新视图控制器 - 最佳实践?

swift : AppDelegate 和 NSManagedObjectContext 为 nil

在 AppDelegate 中动画后不显示根视图控制器

iOS之深入解析AppDelegate的重构