【问题标题】:iPhone - Web service client appiPhone - Web 服务客户端应用程序
【发布时间】:2010-12-08 02:07:17
【问题描述】:

我正在编写一个应用程序,它是一个非常简单的 Web 服务客户端。 我有以下问题: 1. 有没有一种标准的通用方式来编写 Web 服务消费部分,这样它就不会干扰主 GUI 线程?考虑到 Web 请求应该需要很短的时间才能完成(但永远不知道),使用主线程是常见的做法吗? 有教程链接吗? 2. 我看到的所有示例都通过 GET 调用 Web 服务。我需要将数据发布到 Web 服务。 任何已知的使用 POST 的示例/教程?

【问题讨论】:

标签: iphone


【解决方案1】:

如果您使用 iPhone 的内置 Web 请求 API NSURLConnection,则您在主线程上运行请求,但异步运行它,并在返回数据时对委托进行回调。这使应用程序响应用户事件。如果返回数据的解析或处理在主线程上运行时间过长,那么您应该在主线程上运行 NSURLConnection,然后将响应数据以增量方式或在下载完成后移交给辅助线程进行纯计算处理.

可以在非主线程上启动 NSURLConnections,但您需要在非主线程上创建一个运行循环,并且 Apple 库中有随机线程安全错误的报告。如果您确实需要在非主线程上运行请求本身,您可以使用第三方库 ASIHTTPRequest,但除非在非常特殊的情况下,否则您不需要这样做。

使用 NSURLConnection 生成 POST 请求很简单:

    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];

【讨论】:

    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多