2011-04-19 48 views
1

我有一個滑塊用於更改UITextView中文本的字體大小。分析儀和泄漏報告沒有內存泄漏。但是,每次通過移動滑塊更改字體大小時,內存都會增加。最終,應用程序出現內存不足警告。該代碼是:更改UITextView的字體大小泄漏內存

mainText.font = [UIFont systemFontOfSize:mainSlider.value]; 

如果我更換代碼mainText.font = [UIFont systemFontOfSize:40.0];,內存保持不變,無論多少次,我將滑塊移動。我搜索了這個和許多其他網站,尋找有關可能的UIFont錯誤的信息。沒有成功。我看到有人使用我使用的相同代碼,並沒有提及增加內存。請幫忙。

回答

1

有可能是在地方,以避免一遍又一遍的再生同樣的字體,字體緩存(有點像[UIImage的imageNamed:@「」])

它不是在文檔明確說明,但閱讀

您不使用 的alloc和init方法創建UIFont對象。相反, 您使用UIFont的類方法到 查找並檢索所需的字體 對象。這些方法檢查 現有的字體對象與 指定的特徵,並返回 它,如果它存在。否則,他們 根據所需的字體特徵創建一個新的字體對象。

可以讓一個相信有緩存

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIFont_Class/Reference/Reference.html

而且,你在呼喚一個「內存不足警告」?我認爲這只是「內存警告級別= 1」,而不是由於內存不足導致應用程序崩潰?

+0

非常感謝。高速緩存肯定會解釋它。你是正確的,我沒有遇到應用程序崩潰,只是一個警告。這裏是另一個的證據支持你的理論: – user273565 2011-04-20 01:06:45

+0

這裏是我的代碼現在:\t \t'如果(mainSlider.value <[UIFont systemFontSize]){ \t \t \t mainText.font = [UIFont systemFontOfSize:[UIFont systemFontSize] ; \t \t} else if(mainSlider.value <25)\t \t \t mainText.font = [UIFont systemFontOfSize:25]; \t \t} else if(mainSlider.value <50)\t \t \t mainText.font = [UIFont systemFontOfSize:50]; \t \t} else if(mainSlider.value <75)\t \t \t mainText.font = [UIFont systemFontOfSize:75]; \t \t} else if(mainSlider.value <100)\t \t \t mainText.font = [UIFont systemFontOfSize:100]; \t \t}' – user273565 2011-04-20 01:18:49

+0

此代碼的工作原理是因爲我在滑塊移動時只分配了一組有限的字體對象。以前,由於滑塊值以浮點增量(即0.01)移動,所以許多字體對象將被緩存。我認爲這是內存使用率過高的原因。這不是泄漏,但它正在使用資源相同。 – user273565 2011-04-20 01:21:48