2014-04-04 105 views
0

我現在在NetworkCommunicator Helper類上工作,它將處理我與服務器的連接,我正在使用NSURLSession API,並且我有一個關於創建NSURLSession任務的問題。 有兩種方法來創建一個TAKS:NSURLSession任務創建

1 - 一個的NSURLRequest

2 - 一個URL

我想知道什麼是首選的方法是什麼?以更具體的方式讓我的生活變得更容易(添加標題,設置動詞類型等)。當您使用採取NSURLRequest例如像dataTaskWithRequest:方法方法

感謝

回答

0

你是個不錯更加靈活。這樣,您可以自定義HTTP方法,請求正文,標題,基本上每個參數NSURLRequest,因爲它是您創建它。

中的方法採取NSURL創建NSURLRequest爲您在引擎蓋下,所以你不能事後修改請求。例如,dataTaskWithURL: 方法會爲指定的URL創建一個HTTP GET請求,並且您無法將其更改爲POST

使用NSURLRequest創建任務的示例。你可以看到你可以非常靈活這裏:創建使用NSURL任務的

// 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) 
{ 
    ... 
}]; 

例。在這裏你不能修改請求。它是爲你創造的。

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

我不認爲有一個首選的方式,或至少不是明確的蘋果。

問題是關於你想給調用者提供多大的靈活性,允許調用者使用NSURLRequest意味着調用者可以對請求做更多的定製,例如被調用者可以通過設置請撥打NSURLRequest上的右側屬性,以覆蓋在NSURLSessionConfiguration中完成的一些配置。

我覺得你想提供兩個一般的術語;允許設置NSURL的代理通過使用NSURLRequest的代理。基本上NSURL方法將只是一個方便的方法爲調用者,如果調用者不感興趣做一個細粒度設置的請求,它會發送給您NSURL,否則將設置爲NSURLRequest

如果你設計這種類型的API,我可以給你的一般建議是始終複製一份副本,讓你獲得不變的參數版本。這是因爲調用者可以傳遞給你一個可變對象(NSMutableURLRequest),並且你不想讓調用者弄亂你的內部。