2010-12-12 63 views
1

所以我一直在阅读关于使用Singleton的优点和缺点,并且我有一个场景,我不确定我是否应该使用一个,并且我想过咨询你们。我应该使用singleton - Http连接到服务器 - Iphone应用程序设计

我正在编写一个Iphone应用程序,它偶尔必须与服务器(HTTP)有关登录用户的信息进行通信。 此Web服务正从我的应用程序的不同部分调用。

我真正需要的是2型类:

  1. 负责与服务器的通信 - 负责HTTP设置,URL,标题,参数等

2.classes针对每种类型的Web服务api - 用于Expectle UpdateUserInfo类或SendResults类。这第二类将使用第一,并通过应用程序,我需要许多calles到第二类。

我应该将Singleton用于任何一个论文吗?设计它的最佳方式是什么?

谢谢你们!

编辑

例为第1类(我们称之为DataDownloader)的方法是:

(NSData *) downloadDataWithRequest:(NSURLRequest *) 
{ 
    ASIHTTPRequest *dlRequest = [[ASIHTTPRequest alloc] initWithURL:[request URL]]; 
    [dlRequest setTimeOutSeconds:20];  

    if(retryNum < 1) 
     retryNum = 1; 
    [dlRequest setNumberOfTimesToRetryOnTimeout:retryNum]; 

     // and more of the same 
} 

ASIHTTPRequest是我们使用一个HTTP包装的东西。

现在我不想调用这个函数序列,每次我想发送一个HTTP请求的服务器,所以这个选项将把它放在一个专门的类中,并创建一个新的实例,或使用一个单一的。

我可以举例来说要做的就是使用类似的东西:

[[UpdateUserInfo sharedInstance] updateInfo:info] 

可以通过使用帕拉姆信息建立的NSURLRequest,并呼吁

[[DataDownloader sharedInstance] downloadDataWithRequest:InfoUrlRequest] 

现在,假设实现http请求是异步的,我仍然可以同时产生多个。

我希望现在更清楚。 您认为最好的设计方法是什么?

回答

1

我不会看到单身模式作为您尝试解决问题的有用解决方案。它的设计确实是一种控制访问单一/有限资源的技术,从我所知道的情况来看,这并非有意义。

例如,您是否有任何理由不允许用户同时执行两项与网络相关的活动?

顺便说一句,出于兴趣,你看了可可课程,如NSURLConnection?我不确定你需要一个较低级的类来管理服务器通信,因为你正在设想 - 这个类可能就足够了。(必须告知,不知道你想达到什么。)

+0

请参阅我的编辑。谢谢 – Idan 2010-12-12 20:07:21

0

我平时(这就是个人喜好)具有控制网络管理(在一个独立的,并Facade模式)一个单,以不具有比5个允许的连接更。对你来说也是可能的。这将是你的任务1的一部分。
但是正如BobC已经指出的那样,ASIHTTPRequest应该做你需要的一切。
不要重新发明轮子!

+0

看我的编辑。谢谢 – Idan 2010-12-12 20:07:46

0

我使用singleton模式来控制对使用ASIHTTPRequest的基于Web的API的访问,并且它工作得很好。 ASI使用NSOperationQueues进行异步请求,因此您不必担心会发生互斥的请求。

因为我不知道返回请求的顺序,所以有时候我允许我的公共API方法提供userInfo字典,这样我的回调在触发时就会有一些上下文。

相关问题