这是我的两个例子:
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
config.HTTPAdditionalHeaders = ["Accept": "application/json",
"Content-Type": "application/json",
"User-Agent": UIDevice.currentDevice().model]
var request = NSMutableURLRequest(URL: NSURL(string: "http://XXX"))
request.HTTPMethod = "POST"
let valuesToSend = ["key":value, "key2":value]
var error: NSError?
let data = NSJSONSerialization.dataWithJSONObject(valuesToSend, options:NSJSONWritingOptions.PrettyPrinted, error: &error)
request.HTTPBody = data
if error == nil {
let task = NSURLSession(configuration: config).dataTaskWithRequest(request,
completionHandler: {data, response, error in
if error == nil {
println("received == \(NSString(data: data, encoding: NSUTF8StringEncoding))")
}
})
task.resume()
} else {
println("Oups error \(error)")
}
还有第二个
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
config.HTTPAdditionalHeaders = ["Accept": "application/json",
"Content-Type": "application/json",
"User-Agent": UIDevice.currentDevice().model]
var request = NSMutableURLRequest(URL: NSURL(string: "http://XXX"))
request.HTTPMethod = "POST"
let valuesToSend = ["key":value, "key2":value]
var error: NSError?
let data = NSJSONSerialization.dataWithJSONObject(valuesToSend, options:NSJSONWritingOptions.PrettyPrinted, error: &error)
if error == nil {
let task = NSURLSession(configuration: config).uploadTaskWithRequest(request, fromData: data,
completionHandler: {data, response, error in
if error == nil {
println("received == \(NSString(data: data, encoding: NSUTF8StringEncoding))")
}
})
task.resume()
} else {
println("Oups error \(error)")
}
所以我想知道:这两个示例之间有什么区别,以及对我的情况更好(简单的邮寄和接待)
两人在后台不是吗?那么?
NSURLSession
课程参考:
dataTaskWithRequest:
根据指定的URL请求对象创建HTTP请求。
参数- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request
要求
提供请求特定信息的对象,例如 URL、 缓存策略、请求类型和正文数据或正文流。
返回值
新的会话数据任务。
讨论
创建任务后,必须通过调用其resume来启动它 方法。
可用性
适用于 iOS 7.0 及更高版本。
宣布于
NSURLSession.h
uploadTaskWithRequest:fromData:
为指定的 URL 请求对象创建 HTTP 请求并 上传提供的数据对象。
参数- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData
要求
一个
对象,提供 URL、缓存策略、请求 类型等。该请求对象中的主体流和主体数据 被忽略。NSURLRequest
身体数据
请求的正文数据。
返回值
新的会话上传任务。
讨论
创建任务后,必须通过调用其
来启动它 方法。resume
可用性
适用于 iOS 7.0 及更高版本。
宣布于
NSURLSession.h
此外,Ray Wenderlich 说:
NSURLSessionDataTask
此任务发出 HTTP GET 请求以从服务器获取数据。这 数据以
的形式返回。然后您将转换此数据 正确的类型NSData
、XML
、JSON
、UIImage
等plist
NSURLSessionDataTask *jsonData = [session dataTaskWithURL:yourNSURL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { // handle NSData }];
NSURLSessionUploadTask
当您需要将某些内容上传到网络服务时,请使用此类 使用
或HTTP POST
命令。任务代表也 允许您在传输时观察网络流量。PUT
上传图片:
NSData *imageData = UIImageJPEGRepresentation(image, 0.6); NSURLSessionUploadTask *uploadTask = [upLoadSession uploadTaskWithRequest:request fromData:imageData];
这里任务是从会话创建的,图像上传为
。还有使用文件或流上传的方法。NSData
但是,您的问题仍然相当模糊且过于宽泛,因为您没有解释明确的具体问题,并且您可以通过稍微搜索一下来轻松找到此信息。
我问了同样的问题给苹果工程师:
来自苹果的啊,我没有意识到
可以做短暂的请求;我认为这仅适用于长期请求。谢谢!URLSessionUploadTask
还支持通过URLSessionDataTask
的请求正文。您知道使用URLRequest.httpBody
与URLSessionDataTask
对于机构的短期请求有什么区别吗?URLSessionUploadTask
上传任务是数据任务的子类,因此两者之间没有什么区别。建议使用上传任务而不是
上的httpBody
/httpBodyStream
属性。上传/下载任务还具有使用后台会话的好处(但您必须使用委托而不是方便的方法或异步方法)。URLRequest