2010-06-30 78 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