Я хочу объявить объект NSString для использования в предупреждении, но его фактическое содержание зависит от различных факторов, определяемых некоторой переменной.Мне интересно, как лучше подойти к этому.В большинстве случаев я делал что-то вроде этого:
- (void)info {
NSString *targetString = [[NSString alloc] init];
switch (self.target) {
case 1:
targetString = @"ONE";
break;
case 2:
targetString = @"TWO";
break;
case 3:
targetString = @"THREE";
break;
default:
targetString = @"";
break;
}
NSString *message = [[NSString alloc] initWithFormat:@"Text: %@", targetString];
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Info"
message:message
delegate:self
cancelButtonTitle:@"Ok!"
otherButtonTitles:nil];
alert.tag = kInfoAlert;
[alert show];
[alert release];
[targetString release];
[message release];
}
Однако, когда я запускаю это через анализатор сборки, я получаю сообщения о том, что строка пропускает память:
Прежде всегоон говорит:
Значение, сохраненное в 'targetString' во время его инициализации, никогда не читается
Тогда:
Потенциальная утечка выделенного объектав строке 137 и сохраняется в 'targetString'
Эти 2 комментария находятся в строках 136 и 137, где строка 136 равна
NSString *targetString = [[NSString alloc] init];
Альтернативный вариантобъявлять строку как
NSString *targetString;
и устанавливать ее в каждом случае как
targetString = [NSString stringWithFormat:@"ONE"];
и т.д.
или даже выделять строку в каждом случае для освобожденияэто в конце ...
Ну, что будет лучшим подходом здесь?
Спасибо,
Майкл:)