2012-07-23 57 views
0

在我的應用程序要求中,當應用程序第一次啓動時,它會向服務器發送請求以獲取數據,解析並將其保存在將要使用的文檔文件夾中跨越整個項目。在特定的時間間隔之後,應用程序將向服務器發送請求以獲取更新的數據(如果有的話),並更新文檔文件夾中的數據,這將在整個項目中再次更新。所有此過程都在後臺線程中進行。這個過程將重複,直到應用程序在前臺運行,一旦用戶關閉應用程序,應用程序將終止,它不會進入後臺。在應用程序委託中運行連續線程是否正確

這個重複的請求,我在應用程序委託中創建,以及一旦接收到數據並在解析後保存xml解析。現在我的問題是,這是否意味着在應用程序委託中做太多東西是安全的還是存在一些限制或者是這種不好的編程?

這樣做的正確方法是什麼?

回答

0

我在某種程度上不同意torrey.lyons。我認爲創建單身人士一般來說是不好的做法,應儘可能避免。你永遠不應該做的一件事是編寫一個類,以使它具有爲單身。特製的單身人士往往會增加耦合性,當涉及到單元測試時,您可能想要用存根類替換單身人士,或者您可能需要爲每個單元測試重新初始化單身測試。

如果獲取數據的這個任務是一個應用程序級別的任務,那麼它絕對沒有理由不能在邏輯上位於應用程序委託中。然而,我會創建一個「連接管理器」,正如torrey.lyons所建議的那樣,並且有一個作爲應用程序委託的屬性。

我也不會使用顯式後臺線程來做數據更新,但我會使用NSOperation的子類。這比管理你自己的線程要容易得多。

+0

感謝@JeremyP的建議。我實現了NSOperation,它比NSThread更有用,更好。 – 2012-07-24 11:44:40

+0

嗨@JeremyP,在NSOperation是有必要通知客戶端的每一個操作對象的狀態。我的意思是有必要重寫以下方法:start,isConcurrent,isExecuting和isFinished? – 2012-07-25 06:32:46

+0

@NuzhatZari號所有你需要重寫的是主要的方法(只要你把它放在NSOperationQueue上)。或者,使用NSBlockOperation並給它一個塊來執行。 – JeremyP 2012-07-27 12:39:38

0

這是不好的做法。理想情況下,您的應用程序委託人應完全關注自己的責任,即對應用程序發送其委託的消息作出響應。將其他離散職責分解爲其他對象會好得多。例如,您可以有一個負責定期與服務器通信的「連接管理器」對象。如果您確定應用程序一次只能連接到一臺服務器,那麼您可能需要使用單例模式,以便在應用程序中只有一個對象實例,並且任何其他類都可以輕鬆實現該實例。有關應用程序代理和單例的合適角色的詳細討論,請參見Singletons, AppDelegates and top-level data。關於編寫單身人士的一般概述可以在Care and Feeding of Singletons下找到。