UITableView慢

时间:2016-10-11 21:08:09

标签: swift uitableview nsurlsession sdwebimage

我是Swift的新手,并设置了一个tableView,它从JSON提要中提取数据并将其加载到表中。

表格加载正常,但是当表格中有超过10个单元格时,它变得缓慢而且有些滞后,特别是它到达顶部和底部(我想这是一个单元格被重用的地方)。

有人会非常友好地看看我的代码并解释为什么它可能会这样做吗?我已经实现了SDWebImage,虽然它有所帮助但仍然不理想:

MacBook-Pro:tensorflow $ brew config  
HOMEBREW_VERSION: 1.0.6
ORIGIN: https:/  
HEAD: 35ee2831086e923e7fcaf75fb440b01312e3f9c5  
Last commit: 7 days ago  
Core tap ORIGIN: https:/  
Core tap HEAD: 80f18defefc814d60d3799e58835cbeffc8e93c8  
Core tap last commit: 2 hours ago  
HOMEBREW_PREFIX: /usr/local  
HOMEBREW_REPOSITORY: /usr/local/Homebrew
HOMEBREW_CELLAR: /usr/local/Cellar  
HOMEBREW_BOTTLE_DOMAIN: https:/  
CPU: quad-core 64-bit broadwell  
Homebrew Ruby: 2.0.0-p648  
Clang: 8.0 build 800  
Git: 2.8.4 => /Applications/Xcode.app/Contents/Developer/usr/bin/git  
Perl: /usr/bin/perl  
Python: /usr/bin/python  
Ruby: /usr/bin/ruby => /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
Java: 1.8.0_60  
macOS: 10.12-x86_64  
Xcode: 8.0  
CLT: 8.0.0.0.1.1472435881  
X11: N/A  

1 个答案:

答案 0 :(得分:1)

我想在你的cellForRowAt这一行让它变得有点慢

if let data = NSData(contentsOf: url as! URL) {
    cell.imgCarNane.sd_setImage(with: (string: url) as URL!)
}

NSData(contentsOf: url as! URL)让它变得有点慢

只需删除if let子句,SDWebImage处理nil url本身,然后编写

cell.imgCarNane.sd_setImage(with: (string: url) as URL!)

因此,您的cellForRowAt数据源方法现在将变为这样

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell  {
        let cell: TblCell = self.tableView.dequeueReusableCell(withIdentifier: "cell") as! TblCell
        cell.lblCarName.text = tableData[indexPath.row]

        let url = NSURL(string: "\(tableImages[indexPath.row])")
            cell.imgCarNane.sd_setImage(with: (string: url) as URL!)
               cell.pinLabel.text = tablePin[indexPath.row]

                if(tableAvailable[indexPath.row] == "Busy"){
                   cell.onlineIcon.image = UIImage(named: "livefeedofflineicon.png")
                }
                 if (indexPath.row % 2 == 0){
                cell.contentView.backgroundColor = UIColor(red: 237/255.0, green: 234/255.0, blue: 234/255.0, alpha: 1.0)
               }

        return cell
    }

我希望能解决滞后问题