Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
webservice调用的单例模式iOS_Ios_Singleton - Fatal编程技术网

webservice调用的单例模式iOS

webservice调用的单例模式iOS,ios,singleton,Ios,Singleton,我有一个singleton类,它只作为我的应用程序的web服务调用。假设该类命名为MySingleTonClass。现在,为了获得各种数据,我调用了类的不同方法 eg. [[MySingleTonClass sharedInstance] getDataFromServer]; 现在我的问题是,有时我需要进行嵌套的web服务调用(在完成另一个API调用时调用API)。我使用这个唯一的类来完成所有API调用,因为这是一个单例,它会工作吗?甚至我在后面的行中调用这个类的方法 line 1 - [[

我有一个singleton类,它只作为我的应用程序的web服务调用。假设该类命名为
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