我正在尝试使用NSURLSession为http://和https://连接创build一个透明的NSURLProtocol。 然而,目前,即使正在运行完成处理程序,带有应用程序(UIWebView)的URL请求也回来了。 有人有什么想法吗? 代码如下: #import "MyURLProtocol.h" // AppDelegate #import "AppDelegate.h" static NSString * const MyURLProtocolHandledKey = @"MyURLProtocolHandledKey"; @interface MyURLProtocol () <NSURLConnectionDelegate,NSURLSessionDelegate> @property (nonatomic, strong) NSURLConnection *connection; @property (nonatomic, strong) NSMutableData *mutableData; @property (nonatomic, strong) NSURLResponse *response; @end @implementation MyURLProtocol +(BOOL)canInitWithRequest:(NSURLRequest*)request { if ([NSURLProtocol propertyForKey:MyURLProtocolHandledKey inRequest:request]) return NO; NSString *scheme = request.URL.scheme.lowercaseString; return [scheme isEqualToString:@"http"] || […]
一般来说,有必要为networking实施一个class级。 这是一个类,将采取一个url,并提供数据。 所有这些都是为了不打分额外的逻辑控制器。 我遇到过这样的问题,当你第一次创build一个View时,数据不会来。 这是networking类: private static var dataTask: NSURLSessionDataTask? private static var dataJSON: NSData? private static var sessionConfig: NSURLSessionConfiguration = { var configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.allowsCellularAccess = false configuration.HTTPMaximumConnectionsPerHost = 2 configuration.HTTPAdditionalHeaders = ["Accept": "application/json"] configuration.timeoutIntervalForRequest = 30.0 configuration.timeoutIntervalForResource = 60.0 return configuration }() static func getListObjectsBy(url: String?) -> NSData? { let session = […]
我想做一个空的POST请求,并阅读响应头,而我的iOS应用程序在后台。 查看文档,明确指出上传和下载任务在后台支持,但有两个问题: 我不需要上传内容,所以我不想创build一个空文件来使用。 我需要获取标题,所以下载任务不提供必要的委托callback。 这留给我一个NSURLSessionDataTask , 文档指出: 注意:在iOS 8和OS X 10.10之前,后台会话不支持数据任务。 但是, 另一个文档页面以相同的标题(背景传输注意事项)指出: 只支持上传和下载任务(没有数据任务)。 哪个文档页面是正确的? 在后台会话中是否支持NSURLSessionDataTasks 没有数据上传?
我正在实现一个自定义NSURLProtocol ,并在内部想要使用NSURLSession数据任务的内部networking,而不是NSURLConnection 。 我碰到了一个有趣的问题,并想知道NSURLSession / NSURLSessionTask的质询处理程序的内部实现。 – (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler; 在这里,我基本上提供了两个不同的挑战处理程序,一个是completionHandler块,它提供了处理挑战的所有必要的信息,但是也有传统的NSURLAuthenticationChallenge.client ,它具有几乎与一对一对应的方法completionHandler信息选项。 由于我正在开发一个协议,并且想要向调用API实现的URL加载系统向上传递一定的authentication挑战,我需要使用NSURLSession客户端方法: – (void)URLProtocol:(NSURLProtocol *)protocol didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge; 我的问题是completionHandler和NSURLAuthenticationChallenge.client的内部实现是否相同,如果是这样,我可以跳过在委托方法中调用完成处理程序,期望URL加载系统将调用适当的NSURLAuthenticationChallenge.client方法吗?
我有我的应用程序中的飞行searchfunction,这是花了太长的时间来获取数据(超过25秒)。 如果应用程序进入后台或进入睡眠模式,则互联网连接断开。 我已经写了下面的逻辑使用苹果的例子,使API请求继续,即使如果应用程序去背景,但它不工作。 self.session = [self backgroundSession]; self.mutableData = [NSMutableData data]; NSURL *downloadURL = [NSURL URLWithString:@"http://jsonplaceholder.typicode.com/photos"]; NSURLRequest *request = [NSURLRequest requestWithURL:downloadURL]; self.dataTask = [self.session dataTaskWithRequest:request]; [self.dataTask resume]; – (NSURLSession *)backgroundSession { static NSURLSession *session = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.example.apple-samplecode.SimpleBackgroundTransfer.BackgroundSession"]; session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil]; }); return session; […]
这个我的testing案例,指出当使用NSURLSession与HTTP / 2连接时有内存问题。 test1:iOS 9. HTTP / 2服务器 我使用NSURLSession将10Mfile upload到HTTP / 2服务器,如果上传的文件一切正常,但是如果我在上传任务完成之前取消上传任务,那么10M永远不会释放。 test2:iOS 9. HTTPs1.1服务器 我用https1.1文件服务器testing了相同的代码,我取消了上传任务,一切正常,内存恢复正常(10M数据发布) test3 iOS 8. HTTP / 2服务器 这种情况一切正常(NSURLSession没有与HTTP / 2协议协商) 所以,即使有一些不适合我的使用NSURLSession,NSURLSession的性能与HTTP / 2不正常。 除了内存问题之外,当使用NSURLSession和HTTP / 2来上传文件时,进度段的大小是巨大的(一次callback5月2日“didSendBodyData” 我也读过这个页面 。 SSL可能caching一些东西,但不应该caching整个文件(当我取消任务或请求超时,10M文件大小的内存泄漏) 任何人知道是什么原因造成的问题,可以给我一些帮助。 谢谢。 问题更新0912:添加testing项目链接 testing项目: https : //github.com/upyun/swift-sdk/tree/testleak file:UPUtils.swift //Change the url to make comparison test. //let DEFAULT_UPYUN_FORM_API_DOMAIN = "http://v0.api.upyun.com"//http1.1 //let DEFAULT_UPYUN_FORM_API_DOMAIN […]