2010-06-30 99 views
0

我正在編寫一個非常簡單的Web服務客戶端應用程序。 我有以下問題: 1.是否有一種標準的常用方式來編寫Web服務消耗部分,以便它不會干擾主GUI線程?考慮到網絡請求需要很短的時間才能完成(但從來不知道),使用主線程是否很常見? 任何指向教程的鏈接? 2.我看到的所有示例都通過GET調用Web服務。我需要將數據發佈到Web服務。 任何已知的使用POST的示例/教程?iPhone - Web服務客戶端應用程序

+0

你讀過任何文檔? http://developer.apple.com/iphone/library/navigation/index.html 嘗試使用谷歌搜索「iPhone XML解析教程」 – falconcreek 2010-06-30 17:17:35

回答

2

如果您使用的是iPhone的內置Web請求API NSURLConnection,您可以在主線程上運行請求,但是您可以異步地運行該請求,並在返回數據時使用回調代理。這使應用程序響應用戶事件。如果解析或處理返回的數據需要太長的時間才能在主線程上運行,那麼您應該在主線程上運行NSURLConnection,然後遞增地或在下載完成後將響應數據交給輔助線程進行純計算處理。

可以在非主線程上啓動NSURLConnections,但需要在非主線程上創建runloop,並且Apple庫中存在隨機線程安全性錯誤的報告。如果您確實需要在非主線程上運行請求,則可以使用第三方庫ASIHTTPRequest,但除非是非常特殊的情況,否則您不需要這樣做。

生成一個POST請求是直接與NSURLConnection的:

NSString * requestBody = @"format up your body here, which is often form-urlencoded"; 
NSURL * nsurl = [NSURL URLWithString: @"http://example.com/post_request_receiver"]; 
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:nsurl]; 
// set appropriate content type here, usually application/x-www-form-urlencoded 
    [theRequest addValue: @"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[theRequest addValue: [NSString stringWithFormat:@"%d", [requestBody length]] forHTTPHeaderField:@"Content-Length"]; 
[theRequest setHTTPMethod:@"POST"]; 
[theRequest setHTTPBody: [requestBody dataUsingEncoding:NSUTF8StringEncoding]]; 

conn = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately:YES]; 
+0

謝謝。非常好的詳細答案 – jkally 2010-07-01 11:18:19