![](/img/trans.png)
[英]How to change NSURLConnection to NSURLSession in Objective C?
[英]Switch from NSURLConnection to NSURLSession in Objective-C
我在Objective-C中有这个代码,它与NSURLConnection
类的initWithRequest
工作,Xcode给了我以下警告:
不推荐使用initWithRequest:首先在iOS9中弃用 - 使用NSURLSession
我的ViewController.m
代码如下:
NSString url = "my url";
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
conexion = [[NSURLConnection alloc]initWithRequest:req delegate:self];
Conexion
是ViewController.h
中的NSURLConnection
,所以我想知道如何从NSURLConnection
切换到NSURLSession
。
如果您想继续使用基于委托的API,就像当前的实现一样,它是:
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
NSURL *URL = [NSURL URLWithString:string];
NSURLSessionTask *task = [session dataTaskWithURL:URL];
[task resume];
如果这样做,则必须符合NSURLSessionDelegate
, NSURLSessionTaskDelegate
, NSURLSessionDataDelegate
方法,就像当前的NSURLConnectionDataDelegate
和NSURLConnectionDelegate
方法一样。
顺便说一句,我dataTaskWithURL
上面显示了dataTaskWithURL
,但是如果你真的需要使用NSURLRequest
(例如你要做POST或其他请求),那么也有dataTaskWithRequest
。
话虽如此,使用完成处理程序再现更容易,节省您必须编写所有这些委托方法:
NSURLSession *session = [NSURLSession sharedSession];
NSURL *URL = [NSURL URLWithString:string];
NSURLSessionTask *task = [session dataTaskWithURL:URL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// process response here
}];
[task resume];
如果这样做,则不必实现任何这些委托方法。 它类似于NSURLConnection
方便方法sendAsynchronousRequest
,除了它是可取消的。
而且,就像上面的dataTaskWithURL
,还有下载和上传特定的再现, downloadTaskWithURL
和uploadTaskWithRequest
。
有关更多信息,请参阅“ URL会话编程指南”中的“ 使用NSURLSession ”。
NSURL *URL = [NSURL URLWithString:url];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
// ...
}];
[task resume];
您要问的第一件事是您是否要更改API。 NSURLSession仅在iOS 7及更高版本以及OS X v10.9及更高版本中可用。 如果您需要在此之前支持任何内容,则必须在不同的OS版本上使用不同的代码或坚持使用NSURLConnection。
考虑到NSURLConnection的部署范围很广,可以说它永远不会消失 - 以至于即使Apple有机会与tvOS彻底决裂,他们也选择保留它。
所以说实话,除非你有一些特别的理由要使用NSURLSession中的新功能,否则最好的方法可能是使用编译指示来清除编译器警告该代码,并使用NSURLSession来转发新代码(假设您不需要与不支持NSURLSession的旧操作系统兼容)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.