2011-11-06 16 views
2

予有這種情況:UIColor -initWithRed:green:blue:alpha:內存泄露?

UIColor *color = [[UIColor alloc] initWithRed:0/255.f green:156/255.f blue:255/255.f alpha:1]; 
self.lightBlue = color; 
color = nil; 
[color release]; 

而在的UIColor *顏色= [[ALLOC的UIColor]接收memoery泄漏initWithRed:0/255.f綠:156/255.f藍:255/255.f阿爾法:1];

從儀器的情況: instruments situation

任何想法?

回答

5

你正在設置你的局部變量'color'爲零,然後做[無釋放],它什麼都不做。

如果你真的需要'color = nil',你應該在發佈之後再做。

+0

可以通過只有兩條語句在一行上解決:'[color release],color = nil;' – Joost

+0

是的這項工作[color release] ;.我錯了我不真的需要這個顏色=零;謝謝! – donjordano

1

泄漏工具會告訴你哪裏有泄漏的東西被分配。

所以它的意思是,在你分配這些值後,它們從未被釋放 - 這似乎意味着你的導航控制器在它應該被釋放時不會被釋放。不要釋放對象,你不擁有它,你最終會崩潰。 UIColor可能只是爲你緩存這些顏色,而Instruments沒有辦法知道這一點,所以它會將它們報告爲泄漏(基本上是已創建的東西,而您不再提及但未被釋放)。

嘗試運行一段時間的儀器(使用模擬器),然後發送內存警告以查看UIColor是否會清除其緩存。無論哪種方式,沒有任何事情可以解決核心框架內發生的泄漏問題,所以不要嘗試。只要確保你實際上沒有泄漏它們(例如在某個時刻保留它們,而不是釋放它們)。底線是如果上面的代碼是你所做的全部,color是絕對不會泄漏的。如果你將這個物體保留在其他地方而沒有釋放它,它就會漏水。

切勿釋放您不記得保留的對象。 EVER。但我懷疑你只是保留在某個地方,甚至沒有注意到它。