这是我的两个例子:
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)")
}
型
所以我想知道:这两个例子之间有什么区别,对我的情况更好(简单的邮政和接待)
两个人在后台,不是吗?那又怎样?
2条答案
按热度按时间polkgigr1#
从
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
参数一个
NSURLRequest
对象,提供URL、缓存策略、请求类型等。此请求对象中的主体流和主体数据将被忽略。请求的正文数据。
返回值
新会话上传任务。
讨论
创建任务后,必须通过调用其
resume
方法来启动它。可用性
在iOS 7.0及更高版本中可用。
声明
NSURLSession.h
个另外,Ray Wenderlich说:
NSURLSessionDataTask
此任务发出HTTP GET请求以从服务器拉取数据。数据以
NSData
的形式返回。然后您将此数据转换为正确的类型XML
,JSON
,UIImage
,plist
等。字符串
NSURLSessionUploadTask
当您需要使用
HTTP POST
或PUT
命令将某些内容上传到Web服务时,请使用此类。任务的委托还允许您在传输时监视网络流量。上传图片:
型
这里的任务是从一个会话中创建的,图像是以
NSData
的形式上传的。也有使用文件或流上传的方法。然而,你的问题仍然很模糊,太宽泛了,因为你没有解释一个明确的,具体的问题,你可以很容易地通过搜索找到这些信息。
zujrkrfu2#
我问了一位苹果工程师同样的问题:
啊,我不知道
URLSessionUploadTask
可以处理短时间请求;我以为它只能处理长时间请求。谢谢!URLSessionDataTask
也支持通过URLRequest.httpBody
的请求体。你知道使用URLSessionDataTask
和URLSessionUploadTask
来处理带有体的短期请求有什么区别吗?苹果的@guoye-zhang说:
Upload task是data task的一个子类,所以它们之间的区别很小。建议在
URLRequest
上使用upload task而不是httpBody
/httpBodyStream
属性。上传/下载任务也有使用后台会话的好处(但你必须使用delegate而不是convenient或dockerc方法)。