WatchOS 2.2 的 NSURLSession 非常慢
Posted
技术标签:
【中文标题】WatchOS 2.2 的 NSURLSession 非常慢【英文标题】:NSURLSession with WatchOS 2.2 very slow 【发布时间】:2016-03-26 21:00:16 【问题描述】:我尝试在 WatchOS 2.2 应用程序中使用 NSURLSession 从 Web 服务器下载一些 JSON 数据。在 iPhone 本身上完美运行的相同代码在手表上(使用模拟器)永远存在。
我查看了这个例子:https://github.com/shu223/watchOS-2-Sampler,它有一个通过 NSURLSession 下载和显示图像的功能,它也有同样的问题。
这个例子的代码是:
let url = NSURL(string:"https://pbs.twimg.com/profile_images/3186881240/fa714ece16d0fabccf903cec863b1949_400x400.png")!
let conf = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: conf)
task = session.dataTaskWithURL(url) (data, res, error) -> Void in
if let e = error
print("dataTaskWithURL fail: \(e.debugDescription)")
return
if let d = data
let image = UIImage(data: d)
dispatch_async(dispatch_get_main_queue(), () -> Void in
if self.isActive
self.image.setImage(image)
)
task!.resume()
玩弄它,我发现如果我将代码更改为
let session = NSURLSession.sharedSession()
效果很好。
但是,我无法在我的应用中使用它,因为我需要设置委托。
我该怎么做才能让它工作?
【问题讨论】:
你有解决办法吗?在 watch OS 2.2 + 中使用 NSURLSession 加载数据需要太多时间 在 watchOs 5 上,在具有蜂窝连接且不在手表范围内的手表上,简单的网络请求通常需要 > 30 秒。很郁闷 【参考方案1】:我在 watchOS3 中仍然遇到同样的问题。缓慢的网络请求。尤其是刚安装手表应用时,第一次网络请求通常很慢。它最多可能需要 30 秒和超时,但在 ios 中会立即发生。
但我发现通过使用 iOS 应用程序发出网络请求并将其发送到手表应用程序,我发现了立竿见影的改进。
我在 watchOS 中使用 WCSession sendMessage:replyHandler:errorHandler 来通知 iOS 应用发出特定的网络请求。然后我通过 session:didReceiveMessage:replyHandler 中的 replyHandler 发回网络请求的响应。只有短暂的滞后。
作为后备,每当 sendMessage 失败时,我都会通过手表应用程序发出相同的请求,因此如果 iPhone 不在附近,它应该仍然可以工作。
【讨论】:
以上是关于WatchOS 2.2 的 NSURLSession 非常慢的主要内容,如果未能解决你的问题,请参考以下文章
苹果编程语言Swift 2.2发布:支持Ubuntu Linux系统
Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift