Хорошо, это элементарный вопрос, но я задаю его, потому что, честно говоря, я не понимаю, как правильно справиться с этим. Если я раскомментирую последние две строки, этот код вылетает, хотя я не думаю, что он должен.
Следующий код взят из пользовательского 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];
}
Итак, здесь есть три объекта, которые меня смущают:
a) self.text (старое строковое значение) - когда это выпущено? Должен ли я освобождать старое содержимое self.text при вызове этой функции?
b) форматер, NSNumberFormatter, который я разместил здесь, почти наверняка нуждается в выпуске
в) как насчет numberString? Я просто использую его в качестве посредника для создания newLabelValue. если я выпущу его, я верю, что программа вылетает, но почему? Разве я не несу ответственности за использование памяти косвенным путем вызова stringFromNumber?
Любая мудрость высоко ценится, спасибо!