2009-09-22 93 views
0

我使用了幾個圖像樣式UITableViewCells,我想確保我做的事情正確,首先要確保良好的內存管理,其次要確保事情儘可能快我遇到了滾動障礙的麻煩!)。UIImage的性能和優化與UITableViews

我知道使用[UIImage imageNamed:]會緩存圖像的速度,所以可以使用它來獲取我的所有圖像?或者是最好每個UITableViewController只調用一次,並將圖像存儲爲實例變量,爲所有單元重複使用相同的UIImage對象?

我使用透明PNG和清除我的表格和單元格中的彩色視圖來獲得我要去的外觀。是否有任何提示確保儘可能快地渲染以確保表格視圖滾動順暢?目前我只有大約10行(單元格),而且已經非常緩慢。我正在使用提取的結果控制器來獲取我的數據,所以我不認爲這可能會導致它。

非常感謝,

邁克爾

回答

1

使用透明度的提示是不。如果您有多個重疊元素,請查看是否有某種方法可以預先渲染透明效果 - 比幾乎所有內容更重要的是,會干擾表格滾動效果。

另一大打擊是如果你不正確地重用細胞。

抓取的結果控制器不應該做任何事情來減慢速度。你可以嘗試使用儀器,以確保這一點......

+0

因此,它是一個簡單的問題具有在其上的梯度和2個透明UILabels(到UITableViewCellStyleSubtitle類似)的不透明細胞?對於我來說,設置仍然很慢,滾動和拖動。如果那是真的,那真可惜! – 2009-09-23 11:32:57

+0

是的,這正是問題所在。當它滾動時,它正在重新繪製所有這些...考慮將所有內容放在視圖中,將結果呈現爲UIImage並在drawRect中使用它。或者在drawRect中直接在漸變中繪製字符串文本。 – 2009-09-23 16:08:17

0

我想這是更好的,你重用UIImage的實例爲您的所有細胞中,這樣你可以保留它並確保它不是在內存的情況下發布警告,這是您不具備的[UIImage imageNamed:]的緩存。此外,保持平滑的提示是確保您沒有重疊視圖,尤其是透明視圖。

0
  1. 如果您使用的是所有的表格單元格的相同的圖像則是由好到+得到系統鏡像緩存圖像(的UIImage) imageNamed:(NSString *)inName API。

  2. 嘗試通過使用UITableViewCell的dequeueReusableCell API獲取您的每個單元格。如果這返回nil,那麼只能創建一個新的單元對象。

  3. 如果您的表視圖顏色是透明的(UIClearColor),那麼將表視圖的opaque屬性設置爲NO。