【发布时间】:2019-09-16 14:21:22
【问题描述】:
我正在为 iOS 开发一个 Swift 应用程序,但我提出的请求有问题。
此请求每 3 到 5 秒发出一次,正文是一个 5k 行 JSON(总共约 130k 个字符),用于刷新 UITableView。问题是每次在此特定请求上使用.dataTask 时,应用程序都会冻结,然后在发出请求后正常运行。
“冻结”是指我在滚动长 UITableView 时检测到它。即使是一个小的滚动列表也会冻结。
我首先怀疑UITableView 的更新,但我添加了一个小“hack”,在滚动时禁用UITableView 的更新,如下所示:
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
print("started scrolling")
self.currentlyScrolling = true
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
print("stopped scrolling")
self.currentlyScrolling = false
}
它不起作用。
我的问题是:我认为 dataTask 不在主线程中运行。但我不确定。我怎样才能检查它?另外,如何确定 dataTask 是异步的?
dataTask 代码如下所示:
let task = URLSession.shared.dataTask(with: req) { data, response, err in
guard let data = data, err == nil else {
// error
return
}
if let resp = try? JSONSerialization.jsonObject(with: data) {
// success
}
}
task.resume()
不过,请注意,它仅在 JSONSerialization 之前冻结,而不是之后冻结,所以我想这不是导致冻结的原因。
【问题讨论】:
标签: ios swift uitableview urlsession nsurlsessiondatatask