代码之家  ›  专栏  ›  技术社区  ›  Rudiger

AppDelegate应该做多少?

  •  2
  • Rudiger  · 技术社区  · 14 年前

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

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

    1)让应用程序代理建立会话并将进度报告给主菜单类,以便它可以在进度栏中表示(如果会话是在单独的线程中创建的,我会有任何问题吗?),

    2)让应用程序代理显示主菜单(带一堆按钮的uiview和uitoolbar),并让它跟踪和显示进度(我从未在应用程序代理中显示过任何内容,但假设您可以这样做,但不推荐这样做)或

    3)让应用程序代表按主菜单,让主菜单类创建会话并显示进度条。

    4)我认为另一种方法是在委托类中创建会话,并将委托设置为MainMenu而不是Self(AppDelegate),尽管我从未使用过Self以外的任何东西,因此不确定这是否有效,或者是否能够关闭线程(通过调用Super Maybe?)因为它在AppDelegate而不是类的委托中运行。

    正如我之前所说,在一个单独线程的类中创建会话之前,它不会锁定用户界面,我认为最好的方法是第一个,但我是否会遇到让它在单独线程中运行的问题,向应用程序代理报告,然后将该消息发送到主菜单视图?

    我希望一切都有意义,如果您需要进一步澄清,请告诉我。感谢您提供任何信息

    干杯,

    1 回复  |  直到 14 年前
        1
  •  1
  •   Adam Eberbach Adil Shaikh    14 年前

    可能连接状态会影响应用程序的功能。我可能会想到一个连接管理器对象,它能够启动连接,维护它们的状态,并在查询它们的状态时作出响应。与singleton对象返回现有对象或创建并返回不存在的新对象的方式相同,连接管理器甚至不需要“make connection”方法,只需要“get handle”-如果连接未打开,可以尝试这样做。

    您还提到必须在主屏幕上报告状态。有一个管理器对象能够在后台执行不确定时间的任务(打开一个到主机的连接,该主机可能已准备就绪、繁忙、遥远或只是简单断开),然后向主线程报告进度,以便更新UI(记住,在辅助线程中没有uikit访问权),这似乎是理想的,它也可以保持您的视图独特。

    推荐文章