2010-11-10 24 views
1

我有一對夫婦在遊戲中用作玩家的HUD。我經常更新這些標籤,以便玩家獲得最新的信息。問題是我一直在使用UILabel在運行時更改,管理更改字符串的內存

uiLabel.text = [NSString stringWithFormat:@"%3.0f", value]; 

傳遞標籤應該有的新值。不過,我注意到,我在這裏有一些軟內存泄漏。由於我一秒鐘多次執行此更新,並創建了一個設置爲自動釋放的字符串,因此我得到的內存比我需要的要多。保持它,因爲視圖不會消失。

我也試圖alloc和顯式釋放的字符串,如:

NSString* value = [[NSString alloc] initWithFormat: @"%3.0f", value]; 
uiLabel.text = value; 
[value release]; 

不過,我覺得這似乎導致同樣的事情,但速度更快,雖然我不知道爲什麼。在這種情況下,我會認爲應該永遠不會有等待被釋放的字符串,因爲我明確地解僱了他們。

任何人都可以看到我在這裏做什麼,我顯然沒有看到?有沒有更好的/更喜歡的方式來處理這個問題?一些粗略的搜索對我來說並沒有太大的幫助。

回答

2

你沒有做任何不尋常的事情。即使有:

uiLabel.text = [NSString stringWithFormat:@"%3.0f", value]; 

autorelease池被耗盡每次你的代碼控制權返回運行循環時間(這樣至少你經常看到UI更新)。如果你看到內存分配不斷增加,你應該到別處去看看。

+0

我註釋掉了這些調用(整個HUD刷新,目前這些調用僅構成其中的三個調用),並且字符串停止獲取。 - 運行約5分鐘的應用程序將使我獲益良多。我很樂意附上一個屏幕截圖,如果這可能在stackoverflow(我很新的發佈)。如果有某種信息可以幫助我,請告訴我。 – Kevek 2010-11-10 01:38:37

+0

我跑了一些分析測試,我相信你的回答應該是有道理的,但這絕對不是我所看到的。 – Kevek 2010-11-10 17:52:32