繁体   English   中英

DispatchQueue.main.async 导致搜索挂起。 Swift

[英]DispatchQueue.main.async causes the search to hang. Swift

我有一个 tableView,每个单元格都通过 DispatchQueue.main.async 加载了来自 Internet 的图像。

我在一个数组上实现了搜索,其中的数据是 output 到一个表。 因为 DDispatchQueue.main.async,模拟器开始挂很多,但是如果你去掉它,一切正常,我如何实现加载图像而不造成负载?

图片上传代码:

DispatchQueue.main.async {
       if let url = URL(string: "https://storage.googleapis.com/iex/api/logos/\(stock.displaySymbol).png") {
           if let data = try? Data(contentsOf: url) {
                self.stockLogoImageView.image = UIImage(data: data)
                self.imageLoadingIndicator.stopAnimating()
           } 
       }
}

搜索扩展代码:

extension StocksViewController: UISearchResultsUpdating {
    func updateSearchResults(for searchController: UISearchController) {
        searchStocks(searchController.searchBar.text!)
    }
    
    func searchStocks(_ searchText: String) {
        searchStocksList = stocks.filter({(stock: Stock) -> Bool in
            return stock.displaySymbol.lowercased().contains(searchText.lowercased()) || stock.description.lowercased().contains(searchText.lowercased())
        })
        
        stocksTableView.reloadData()
        
    }
}

不要在主队列上做联网,必须在主队列上做的是UIKit的工作。

   // Network on background queue
   if let url = URL(string: ....),
      let data = try? Data(contentsOf: url) {
        let img = UIImage(data: data)

        // Dispatch back to main to update UI
        DispatchQueue.main.async {
           self.stockLogoImageView.image = img
           self.imageLoadingIndicator.stopAnimating()
       }
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM