![](/img/trans.png)
[英]What is the most efficient way to display CVImageBufferRef on iOS
[英]What is the most efficient way to display a table with multiple columns in iOS?
我的問題是加載緩慢,滾動速度很快。
我必須顯示一個有 10 列的表格:
+-----+------+------+------+------+------+------+------+------+-------+ | Pos | Name | Col3 | Col4 | Col5 | Col6 | Col7 | Col8 | Col9 | Col10 | +-----+------+------+------+------+------+------+------+------+-------+ | 1 | Foo | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 2 | Bar | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 3 | Baz | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +-----+------+------+------+------+------+------+------+------+-------+
忽略表頭(我不是顯示它)我使用UITableView
與子類UITableViewCell
來表示數據。
我的自定義UITableViewCell
有 10 個UILabel
子視圖,全部添加到它的contentView
。 每列一個。
我只是在UITableView
上的cellForRowAtIndexPath
方法中為每個UILabel
子視圖設置文本值。
在任何時候,屏幕上大約有 14 行。 滾動速度超級快。 我的reuseIdentifier
運行良好。
但是,表的初始加載速度明顯較慢。 比我使用UITableView
其他屏幕慢很多,但那些列的數量要少得多。
我的單元格都設置為opaque
(我理解這是默認設置)。
我缺少什么技巧嗎? 是否有太多的意見? 我應該采取另一種方法嗎? 或者我做得很好,我應該在我的代碼中尋找另一個影響加載時間的問題嗎?
更新:
我已經運行了儀器,大部分時間(500 毫秒 74.5%)是:
CA::Layer::layout_and_display_if_needed(CA::Transaction*)
更新:
一些人認為我的數據是瓶頸。
我正在使用NSFetchedResultsController
。
沒有計算。 每行的數據直接從相應的實體加載,數據按原樣顯示。 我不會遍歷對象圖來從任何其他關系或類似的東西中獲取數據。
啟用 CoreData SQLDebug
,我可以看到 20 行的總提取執行時間為 0.0014 秒。 我的批量大小設置為 20(比屏幕上可見的略多)以幫助滾動。
滾動速度非常快,所以我認為數據不是這里的問題。
UITableViews 通常用於顯示一列數據。 您可以將UICollectionView用於此類事情。
或者,如果您想以一種艱難的方式進行操作,您可以基於 scrollview 實現您自己的表格視圖。
但是關於緩慢加載 - 你是從某個網絡服務加載數據還是只是簡單的演示,所有數據的值都相同?(如果不是 - 嘗試這種方式來理解問題)
嘗試一次插入一行,假設在您的 viewDidLoad 或 viewwillappear 中,如果您嘗試獲取所有數據並進行一些計算,則需要時間。 所以我的建議是將一行數據插入它,然后再插入另一行。
通過一些更改,我現在將屏幕加載所需的時間減少了一半。
主要的變化是我不再在每一行上使用 10 個不同的子視圖(每列一個子視圖)。 相反,我現在每個單元格只使用一個子視圖。
為了讓每個單元格顯示數據,我使用了附加到單元格contentView
的子類UIView
。
在那個子類UIView
我drawAtPoint:withAttributes:
了drawRect
方法以使用drawAtPoint:withAttributes:
。 用不同的文本和位置調用 10 次似乎比定位 10 個不同的UILabel
快得多。
StackOverflow 上的這個答案為我指明了正確的方向。
另一個較小的更改是緩存NSClassFromString(myCustomCellName)
的結果,每次為表中的每一行調用新的結果(當然除非它被重用)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.