2010-12-12 78 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字典,這樣我的回調在觸發時就會有一些上下文。

相關問題