好的,這是一個基本的問題,但我問,因爲我真的不明白如何正確管理這個。如果我取消註釋最後兩行,那麼這段代碼會崩潰,即使我認爲它不應該。Memory/Obj-C正確的對象釋放。哪些需要發佈?
以下代碼來自自定義的子類UILabel,其中我添加了以下方法setTextFromFloat。
-(void)setTextFromFloat:(float)newValue {
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode:NSNumberFormatterRoundUp];
NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:newValue]];
NSString *newLabelValue = [numberString stringByAppendingString:@"x"];
self.text = newLabelValue;
//[numberString release];
//[formatter release];
}
所以,這裏有三個對象,我感到困惑:
一)self.text(舊的字符串值) - 當這種釋放?當我調用這個函數時,我應該釋放self.text的舊內容嗎?
B)格式,我alloc'd這裏NSNumberFormatter幾乎肯定需要釋放
三)怎麼樣numberString?我只是用它作爲中介來構建newLabelValue。如果我釋放它,我相信該程序崩潰,但爲什麼?我不負責通過調用stringFromNumber間接使用的內存?
非常感謝任何智慧,謝謝!
我強烈建議您從Build菜單中執行「Build and Analyze」。它將突出顯示您正在釋放/釋放的內容。 – BarrettJ 2010-07-22 14:01:59