【问题标题】:What is the quickest way to get the String contents of a URL using Cocoa/iPhoneSDK?使用 Cocoa/iPhoneSDK 获取 URL 的字符串内容的最快方法是什么?
【发布时间】:2010-09-19 12:04:54
【问题描述】:

说我要获取的HTML

http://www.google.com

使用 Cocoa Touch 框架的一些内置类作为字符串。

我需要编写的最少代码量是多少?

我已经走到了这一步,但不知道如何进步。一定有更简单的方法。

CFHTTPMessageRef req;
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
req = CFHTTPMessageCreateRequest(kCFAllocatorDefault,
                                 CFSTR("GET"),
                                 (CFURLRef)url,
                                 kCFHTTPVersion1_1);

【问题讨论】:

    标签: iphone objective-c http url networking


    【解决方案1】:

    最快的方法是使用NSString的+stringWithContentsOfURL:方法。但是,这是一个模态调用,您的应用程序在运行时将无响应。您可以将其移至后台线程,或使用 NSURLConnection 类发出正确的异步请求。

    【讨论】:

    • 值得注意的是,在 iPhone OS 上,同步 URL 加载方法会泄漏内存。
    • 你指的是 NSURLConnection 吗?您在哪里看到泄漏?
    【解决方案2】:

    执行此操作的一种方法如下,但是正如 Ben Gottlieb 指出的那样,这是一个同步请求,将导致您的程序执行等待此函数调用的返回,可能会使您的应用程序无反应。

    NSURL *url = [ NSURL URLWithString: @"http://www.google.com"]; 
    NSURLRequest *req = [ NSURLRequest requestWithURL:url
                                          cachePolicy:NSURLRequestReloadIgnoringCacheData
                                      timeoutInterval:30.0 ];
    NSError *err;
    NSURLResponse *res;
    NSData *d = [ NSURLConnection sendSynchronousRequest:req
                                       returningResponse:&res
                                                   error:&err ];
    

    您可以在 Apple 开发文档中找到有关编写正确的委托方法来处理异步连接 here 的信息。

    【讨论】:

      猜你喜欢
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多