2017-05-31 107 views
1

我正在致力於UITableView中提供的自動調整單元格。爲什麼DispatchQueue.main.async會影響單元格自動調整?

除了當我嘗試從DispatchQueue設置圖像到UIImageView時,它們表現良好。當我直接設置圖像所有工作正常。

例子:

DispatchQueue.main.async { 
    self._thumbnailImageView.image = image 
} 

你能不能分享一下我的思念,爲什麼DispatchQueue.main.async塊可以在細胞大小調整產生影響。

+0

如果您已經在主線程中,則不必執行'DispatchQueue.main.async'來設置圖像。這可能會降低性能,因爲圖像的設置將會延遲。想象一下,當前的UI更新必須在iOS應用程序再次使用主線程設置新圖像並重新繪製之前完成。 –

+0

@Hoa thx的建議,但我使用DispatchQueue.main.async從後臺線程設置圖像。 –

回答

1

我的猜測是你的調用堆棧已經讓表視圖知道它需要佈局更新,但異步的沒有。

添加

tableView.setNeedsLayout() 

異步塊裏面看看是否可行。您可能只需要在單元格上執行此操作。

+0

是否可以,如果我會從tableView(_ tableView:UITableView,willDisplay cell:UITableViewCell,forRowAt indexPath:IndexPath)調用它?或者它應該直接在代碼塊中調用? –

+0

它需要在該代碼塊中,以便它在更新圖像後發生。 –

+0

Thx的幫助,但這一步並沒有幫助我。 –

0

經過一番研究,我發現,在這種情況下更適合使用:

DispatchQueue.global(qos: .userInteractive).async 

由於服務質量一流的。在我的情況下,我應該使用.userInteractive

與用戶交互的工作,例如在主線程上運行,刷新用戶界面或執行動畫。如果 工作不會很快發生,則用戶界面可能會凍結。 專注於響應能力和性能。

但是真的需要更多解釋爲什麼DispatchQueue.main.async表現不佳。

相關問題