webservice调用的单例模式iOS
我有一个singleton类,它只作为我的应用程序的web服务调用。假设该类命名为webservice调用的单例模式iOS,ios,singleton,Ios,Singleton,我有一个singleton类,它只作为我的应用程序的web服务调用。假设该类命名为MySingleTonClass。现在,为了获得各种数据,我调用了类的不同方法 eg. [[MySingleTonClass sharedInstance] getDataFromServer]; 现在我的问题是,有时我需要进行嵌套的web服务调用(在完成另一个API调用时调用API)。我使用这个唯一的类来完成所有API调用,因为这是一个单例,它会工作吗?甚至我在后面的行中调用这个类的方法 line 1 - [[
MySingleTonClass
。现在,为了获得各种数据,我调用了类的不同方法
eg. [[MySingleTonClass sharedInstance] getDataFromServer];
现在我的问题是,有时我需要进行嵌套的web服务调用(在完成另一个API调用时调用API)。我使用这个唯一的类来完成所有API调用,因为这是一个单例,它会工作吗?甚至我在后面的行中调用这个类的方法
line 1 - [[MySingleTonClass sharedInstance] getDataFromServer];
line 2 - [[MySingleTonClass sharedInstance] getOtherDataFromServer];
这也行吗?
据我所知,一个单身汉的例子只会在记忆中保留一次。这只是一次一次的例子。因此,如果调用sharedInstance时sharedInstance(已在内存中)已按计划完成一项工作?或者我应该将WebServiceCall类更改为普通类并每次创建对象,因为这将使该类一次具有多个对象,因此同时进行多个API调用
请建议。提前谢谢
编辑
singleton类在其内部实现了AFNetworking方法如果共享资源由API更改,则需要使用synchronized处理更改,以便确保以同步方式处理对singleton所做的更改
如果该单例对象没有被API更改,那么就没有问题。如果该共享资源被API更改,那么您将需要使用synchronized处理更改,以便确保以同步方式处理对单例对象所做的更改
如果该单例对象没有被API更改,那么就没有问题这可能有效,也可能无效,这取决于这些方法的内部实现方式。 例如,如果被调用的线程只负责调用API和获取数据,那么它将工作,但这将是糟糕的设计
更好的解决方案是围绕块设计api。在一个web服务的完成块中,您可以调用第二个服务,依此类推。您应该查看一些执行此操作的代码。这可能有效,也可能无效,这取决于这些方法的内部实现方式。 例如,如果被调用的线程只负责调用API和获取数据,那么它将工作,但这将是糟糕的设计
更好的解决方案是围绕块设计api。在一个web服务的完成块中,您可以调用第二个服务,依此类推。您应该查看一些实现此功能的代码。您不应该将其作为singleton类。必须始终为web服务类创建新实例。@BharathVankireddy这并不总是正确的。如果您正在使用AFNetworking,那么并不总是需要一个新实例。它以操作的形式命中所有api并将其添加到队列中。这些不是并发运行的。您不应该将其作为singleton类。必须始终为web服务类创建新实例。@BharathVankireddy这并不总是正确的。如果您正在使用AFNetworking,那么并不总是需要一个新实例。它以操作的形式命中所有api并将其添加到队列中。这些不是并发运行的。问题不在于共享资源,而在于singleton类调用是否同时存在两个网络调用?问题不在于共享资源,而在于singleton类调用是否同时存在两个网络调用?@SahebRoy那么在您的情况下,最有可能是秩序可以是任何东西。。第二次调用可能在第一次调用完成之前完成。你能展示一下这些方法中任何一种的实现吗?重点不在于顺序。假设我打了第一个电话,我知道它仍然在进行,因为它需要很多时间,那么如果我打第二个电话,它会工作吗?是的,它会。AFNetworking将在不同的线程上处理它,因此它将让我尝试并返回到u@SahebRoy那么在你的情况下,订单很可能是任何东西。。第二次调用可能在第一次调用完成之前完成。你能展示一下这些方法中任何一种的实现吗?重点不在于顺序。假设我打了第一个电话,我知道它仍然在进行,因为它需要很多时间,那么如果我打第二个电话,它会工作吗?是的,它会。AFNetworking将在不同的线程上处理它,所以它会让我尝试一下,然后返回到u