2014-01-27 133 views
0

首先,我對Cocoa和客觀C開發非常陌生。事實上,這是我正在開發的第一個真正的項目 - 只是一個可以執行一些Web服務調用的小型Mac OSX應用程序。如何在Cocoa中進行異步Web服務調用

我很明顯一直在用谷歌搜索我的手指,試圖找出什麼是最好的方式來做到這一點,(或至少是最現代的方式),但無法真正找到任何東西。有很多博客使用一百萬個不同的框架完成工作,但我不知道這些工作是如何過時的。

因此,現在,2014年1月,在Cocoa中執行異步Web服務調用的最佳方式是什麼?

回答

1

如果您想讓自己的生活變得最簡單,請使用第三方框架AFNetworking

如果您自己編寫此代碼(我不一定建議),如果需要支持以前的版本,則可以使用NSURLSession(如果僅支持Mac OS X 10.9及更高版本),或者使用NSURLConnection

有關Apple技術的信息,請參閱URL Loading System Programming Guide


就我個人而言,我已經完成了這兩種方式。我已經「推出了自己的」一套課程,這些課程在一年多之後仍然在不斷髮展。我也使用了AFNetworking。我學習了很多自己的班級框架,在教學上,這是一個很有價值的練習。但要認識到,需要付出很大的努力來加速良好的異步網絡代碼的所有細微之處。

當然,可以使用,例如,NSURLConnection方法sendAsynchronousRequest很輕鬆了,但如果你想進步更新,處理驗證挑戰,形式​​請求,使用NSOperation爲基礎的請求,等等,你很快就會發現自己在非平凡的代碼量。 AFNetworking不是沒有缺陷,它通常是一個非常強大的網絡課堂,我衷心爲新開發人員推薦。

+0

感謝AFNetworking的建議Rob。這是你自己使用的嗎?不是自己編寫所有繁瑣的代碼不被認爲是作弊嗎?只要你完成了工作,我想.. – Tiwaz89

+1

@Relborg我已經完成了兩個。不,使用第三方框架不是「作弊」,它很聰明。當然,你可以很容易地用'NSURLConnection' /'NSURLSession'完成你自己的簡單請求。除了最微不足道的要求之外,要做到這一點,你自己很快就會變成一個不平凡的練習,我不會爲新的開發人員推薦它。 AFNetworking擁有強大的用戶基礎,是快速開展工作的好方法,不會在細節上迷失方向。 – Rob

1

它完全取決於您的要求。但現在天,嵌段大多使用異步任務,

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ 
    //Do stuff of asynchronous task 
    dispatch_async(dispatch_get_main_queue(), ^(void){ 
     //Update your UI. 
    }); 

見文件的GCD

同時阻止方法,通過NSURLConnection類提供,

sendAsynchronousRequest:queue:completionHandler: 

看到here如何使用它

如果你想同步任務進度條,那麼你應該去NSURLConnectionDelegate方法

現在在新版本中啓動新概念NSURLSession你可以用它。

1

你的問題的核心答案是NSURLSession

有更簡單的部分做更簡單的事情,但NSURLSession可能是最好的起點。