2010-07-07 208 views
2

在iPhone應用程序內訪問Web服務是一件我尚未找到清晰,美觀的解決方案的問題。我不是在討論如何發送查詢或解析迴應,而是談論「大圖」答案。iPhone +網絡服務最佳實踐

忽視服務器端技術,您將如何將Model對象插入Web Service?你如何設計你的代理對象?你如何緩存你的資源?

回答

5

如果您的Web服務碰巧是一個Ruby on Rails應用程序,那麼Objective Resource是一個很棒的工具:http://iphoneonrails.com/

如果沒有,那麼我傾向於使用ASIHTTPRequest(http://allseeing-i.com/ASIHTTPRequest/),它提供了一個很好的網絡層。根據API,您可以直接使用ASI對象,或者如果您想添加每個請求功能(如身份驗證或響應解析),則可以爲現有的ASI類創建子類。

您通常希望在後臺運行請求,以便在等待請求完成時不會阻止UI。您總是可以使用後臺線程路由,但ASIHTTPRequest提供的一種很好的「Objective C」風格方法是提供一個在請求完成時調用的委託(另請參閱「創建異步請求」,網址爲http://allseeing-i.com/ASIHTTPRequest/How-to-use)。在許多情況下,請求委託是啓動請求的視圖控制器。

模型層取決於複雜性以及數據的格式。我所使用的大多數API都使用JSON,爲此可以使用SBJSON或yajl-objc來解析。這些通常會將數據解析爲諸如NSString,NSArray和NSDictionary等基類。有時候這就足夠了,或者如果你希望你的模型作爲自己的類存在,那麼你可以讓模型從一個基類繼承,這個基類負責把NSDictionary/NSArray轉換成屬性。

最後爲了進行緩存,Core Data提供了一種持久保存到磁盤的好方法。爲了在內存中進行緩存,可以讓請求在控制器之間共享的單獨「管理器」類中進行。這些管理器使用這裏描述的Singleton設計模式:What should my Objective-C singleton look like?