【问题标题】:NSURLSession tasks creationNSURLSession 任务创建
【发布时间】:2014-04-04 15:53:52
【问题描述】:

我现在正在研究 NetworkCommunicator Helper 类,它将处理我与服务器的连接,我正在使用 NSURLSession API,并且我对创建 NSURLSession 任务有疑问。 创建任务有两种方式:

1 - 带有 NSURLRequest

2 - 带有网址

我想知道首选的方式是什么?更具体地说,我的生活会更轻松(添加标题、设置动词类型等)。

谢谢

【问题讨论】:

    标签: ios objective-c nsurlsession


    【解决方案1】:

    当您使用采用NSURLRequest 的方法(例如dataTaskWithRequest: 方法)时,您会更加灵活。这样您就可以自定义 HTTP 方法、请求正文、标头,基本上是 NSURLRequest 的每个参数,因为它是您创建的。

    采用NSURL create NSURLRequest for you 的方法,因此您以后无法修改请求。例如dataTaskWithURL: 方法为指定的URL 创建一个HTTP GET 请求,您不能将其更改为POST

    使用NSURLRequest 创建任务的示例。您可以在这里看到您可以非常灵活:

    // Create a simple JSON data.
    NSData *JSONData = [NSJSONSerialization dataWithJSONObject:@{ @"numbers" : @[@1, @2, @3] } options:0 error:nil];
    
    // Create a POST request with our JSON as a request body.
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
    // Set HTTP method.
    request.HTTPMethod = @"POST";
    
    // Set request body.
    request.HTTPBody = JSONData;
    
    // Create a task.
    NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request
                                                                 completionHandler:^(NSData *data,
                                                                                     NSURLResponse *response,
                                                                                     NSError *error)
    {
        ...
    }];
    

    使用NSURL 创建任务的示例。在这里您不能修改请求。它是为您创建的。

    // Create a GET task.
    NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithURL:url
                                                             completionHandler:^(NSData *data,
                                                                                 NSURLResponse *response,
                                                                                 NSError *error)
    {
     ...
    }];
    

    【讨论】:

      【解决方案2】:

      我认为没有首选方式,或者至少 Apple 没有明确说明。

      问题更多是关于您想为调用者提供多大的灵活性,允许调用者使用NSURLRequest 意味着调用者可以对请求进行更多自定义,例如被调用者可以通过设置NSURLRequest 上的正确属性,以覆盖在 NSURLSessionConfiguration 中完成的某些配置。

      我认为一般而言,您希望同时提供两者;允许设置NSURL 的是通过将使用NSURLRequest 的代理。基本上,NSURL 方法只是调用者的一种方便方法,如果调用者对请求的细粒度设置不感兴趣,它将向您发送NSURL,否则将为您设置NSURLRequest

      如果您设计这种 API,我可以给您的一般建议是始终复制到您收到的参数的不可变版本。这是因为调用者可以向您传递一个可变对象 (NSMutableURLRequest),并且您不想让调用者弄乱您的内部结构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-22
        相关资源
        最近更新 更多