0

在我的应用程序要求中,当应用程序第一次启动时,它将向服务器发送请求以获取数据,对其进行解析并将其保存在将在整个项目中使用的文件夹中。再次在特定时间间隔后,应用程序将发送请求服务器获取更新的数据(如果有)并更新文档文件夹中的数据,这将再次在整个项目中更新。所有此过程都在后台线程中发生。此过程将重复,直到应用程序在前台运行一次用户关闭应用程序,应用程序将终止,它不会进入后台。

我在应用程序委托中创建的这个重复请求以及在接收到数据后进行 xml 解析并在解析后保存。现在我的问题是,这是否意味着在应用程序委托中做太多事情是安全的,还是有一些限制,或者这是糟糕的编程?

这样做的正确方法是什么?

4

2 回答 2

0

这是不好的做法。理想情况下,您的应用程序委托应该只关注自己的职责,即。响应应用程序发送其委托的消息。将其他离散职责拆分为其他对象要好得多。例如,您可以有一个负责定期与服务器通信的“连接管理器”对象。如果您确定应用程序一次只能连接到一台服务器,您可能希望使用单例模式,以便应用程序中只有一个对象实例,并且任何其他类都可以轻松访问它。可以在Singletons、AppDelegates 和 top-level data中找到关于应用程序委托和单例的正确角色的很好的讨论。关于编写单例的一个很好的概述可以在下面找到单身人士的照顾和喂养

于 2012-07-23T10:44:16.600 回答
0

我在一定程度上不同意 torrey.lyons。我认为创建单例一般来说是不好的做法,应该尽可能避免。您永远不应该做的一件事是编写一个类,使其必须是一个单例。专门构建的单例往往会增加耦合,并且在单元测试中可能会出现问题,您可能希望用存根类替换单例,或者您可能需要为每个单元测试重新初始化它。

如果这个获取数据的任务是应用程序级别的任务,那么它绝对没有理由不能在逻辑上位于应用程序委托中。但是,我会按照 torrey.lyons 的建议创建一个“连接管理器”,并将其作为应用程序委托的属性。

我也不会使用显式后台线程来进行数据更新,但我会使用NSOperation的子类。这比管理自己的线程要容易得多。

于 2012-07-23T14:48:01.270 回答