【问题标题】:Singleton Pattern iOS for webservice calls用于 Web 服务调用的单例模式 iOS
【发布时间】:2016-01-18 10:06:24
【问题描述】:

我有一个单例类,它只用作我的应用程序的 Web 服务调用。假设该类被命名为MySingleTonClass。现在为了获取各种数据,我调用了类的不同方法。

eg. [[MySingleTonClass sharedInstance] getDataFromServer];

现在我的问题是,在某些时候我必须进行嵌套 Web 服务调用(在完成另一个 API 调用时调用 API)。我正在使用这个唯一的类来执行所有 API 调用,因为这是一个单例,它会工作吗?或者我什至在后续行中调用这个类的方法。

line 1 - [[MySingleTonClass sharedInstance] getDataFromServer];
line 2 - [[MySingleTonClass sharedInstance] getOtherDataFromServer];

这也行吗? 据我了解,单例实例只会在内存中保留一次。这是一次它的一个实例。因此,如果在 sharedInstance 已经完成工作时调用 sharedInstance,(已经在内存中)按计划工作?或者我应该将 WebServiceCall 类更改为普通类并每次都创建对象,因为这会使该类一次具有多个对象,因此同时进行多个 API 调用。

请提前建议。谢谢。

编辑

单例类内部实现了 AFNetworking 方法

【问题讨论】:

  • 你不应该把它作为单例类。您始终必须为您的 Web 服务类创建一个新实例。
  • @BharathVankireddy 这并不总是正确的。如果您使用的是 AFNetworking,则并不总是需要一个新实例。它以操作的形式访问所有 api 并将其添加到其队列中。这些不是同时运行的。

标签: ios singleton


【解决方案1】:

如果该共享资源被 API 更改,那么您将需要使用同步来处理更改,以便确保对单例所做的更改以同步方式处理

如果 API 没有更改该单例对象,则没有问题

【讨论】:

  • 问题不在于共享资源,而在于单例类调用会同时存在 2 个网络调用吗?
【解决方案2】:

这可能会或可能不会起作用,具体取决于这些方法的内部实现方式。 例如,如果调用 this 的线程仅负责调用 API 和获取数据,那么它会工作,但这是一个糟糕的设计。

更好的解决方案是围绕块设计您的 api。在一个 Web 服务的完成块中,您可以调用第二个服务,依此类推。您应该查看一些执行此操作的代码。

【讨论】:

  • @SahebRoy 那么在您的情况下,订单很可能是任何东西.. 第二次调用可能在第一次调用完成之前完成。你能展示任何这些方法的实现吗?
  • 重点不在于订单。假设我打了第一个电话,并且我知道它仍在进行中,因为它需要很长时间,那么如果我打第二个电话,它会工作吗?
  • 会的。 AFNetworking 将在不同的线程上处理它,所以它会工作
  • 让我试试然后回到你身边
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多