在我的iOS應用中,許多ViewController需要根據用戶輸入和操作發送/接收來自服務器的數據。我將爲我所有的網絡活動使用NSURLSession。但我不想讓每個ViewController都符合NSURLSession委託協議並重復所有的方法。在視圖控制器中共享NSURLsession委託實現
我看到了兩個解決方案
創建符合NSURLSession委託 協議的類。其他類創建該類的一個實例,並使用它的方法從服務器發送/接收數據。處理所有網絡的類的重用將通過重載其init方法使用單例設計模式完成,以便僅創建它的實例。
- 這種方法的缺點似乎是單身人士使得創建單元測試非常困難,因爲單元測試完全可以將每個類的功能與其他人隔離開來。 I.e.Suppose一個錯誤只發生,因爲viewcontroler1問「共享類」發送一個特定的消息跟隨viewcontroller 2問它發送一些其他消息。那麼使用單元測試是不可能的。
UIViewController的子類,它實現了我的ViewControllers的方法和子類。這裏
- 的一個問題是,如果我有各種不同的意見的應用程序,那麼我就需要用NSURL會議委託方法每種視圖控制器的創建子類。我必須謹慎地將方法分配給委託對象。當我看着它,我覺得這種方式也有同樣的單元測試問題,方法1.
我將不勝感激 1.其他途徑的任何意見在類似的情況 2使用了。以上方法的優點/缺點(包括上面列出的2)。我意識到這可能有點主觀,但恕我直言,在設計模式上獲得好建議與我的代碼或使用哪個API解決問題的問題的答案一樣重要(甚至更重要)X
「創建一個符合NSURLSession委託協議的類」。如果一次只有一個連接可以處於活動狀態,並且/或者在視圖控制器被銷燬後應該繼續連接,則將其設置爲單例。否則,每個視圖控制器可以使用該類的單個實例。 – Gruntcakes
謝謝,因爲用戶可能會發送一個文件,然後a)將應用程序放入後臺或b)移動到應用程序中的另一個屏幕,我認爲最好採用單例方法。但是我看到一些關於單身人士是壞事的可怕的東西。恕我直言,所測試的可測試性問題似乎也適用於其他方法。所以,我認爲我可能會這樣做。 –