2012-12-18 46 views
1

我對iOS很新,嘗試實現HTTP post/Get通信的最佳方式。正確的方式來實現HTTP POST /在iOS中獲取

問題:

我想打多的API調用,並且每個電話都有其獨立的響應。我正在嘗試編寫通用網絡應用,理想情況下,它將採取API網址,撥打電話並將數據返回給調用者。什麼是實現它的正確方法?我發現每種方法都有適度的辯論和粉絲。

選項1:

dispatch_async(aQueue,^{ 
    ...[ make a sync network request get data back] 
    --- perform operation on data 
    --- then pass proceed data UI or set it in model. 

    dispatch_async(dispatch_get_main_queue() 
    } 

選項2:

-(NSString *) postData:(NSDictionary *)data serverUrl:(NSString *)targetUrl 
    -- call post data method with seperate delegate for each caller 
    -- start async request 
    -- on DidFinishedLaunching or OnError check delegate & then 
     return response back to callback 

感謝您的投入。

+0

快速思考。在MVC設計中,我會更新Model對象。控制器將更新視圖。不要將數據傳回UI。 –

+0

你可以使用['NSURLConnection'](http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html)。請參閱該文檔,該文檔頂部的鏈接以及[SimpleURLConnections示例]中的GetController和PostController(http://developer.apple.com/library/ios/#samplecode/SimpleURLConnections /Introduction/Intro.html)來演示如何執行'GET'和'POST'請求​​。 – Rob

+0

感謝球員們,對於選項1或選項2的任何最後投票 – kodeshpa

回答

1

有一個很棒的圖書館,名爲AFNetworking,它很容易實現。

它使用塊,它極大地簡化了類之間的數據通信(消除委託),並且是異步的。

例使用率低於:

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:"www.yourwebsite.com/api"]]; 

NSDictionary *params = @{ 
    @"position": [NSString stringWithFormat:@"%g", position] 
}; 

[client postPath:@"/api" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

}]; 

由於作爲簡單!結果在調用HTTP Post或Get方法的類中直接可用。

它甚至包括圖像和JSON請求,JSON反序列化,帶進度回調的文件下載等等。

+0

謝謝,我會嘗試併發布結果。 – kodeshpa

1

我認爲你的第一個選擇不好。它會阻止長時間的合併線程,這是不可取的。在任何環境中實現多線程時,系統提供的池線程不應該用於長時間運行的進程。第二個同步網絡呼叫並不是真正的建議,它有它自己的陷阱。

你的第二個選擇更可行。您可能能夠做的一項改進是執行在完成啓動到GCD線程後發生的工作,並在處理之後在主線程上發送數據。

相關問題