我想聲明一個NSString對象在警報中使用,但其實際內容取決於由某個變量確定的各種因素。我想知道如何最好地解決這個問題。在大多數情況下,我做了這樣的事情:如何聲明一個具有多個可能值的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"];
等
甚至allocing在每種情況下的字符串,以便在年底發佈它...
那麼,會是什麼這裏最好的辦法是?
感謝,
邁克爾:)
所以我應該只需要聲明它作爲的NSString * targetString,然後將它像targetString = @ 「ONE」? – Smikey 2011-01-26 17:47:29
沒有聲明爲零。`NSString * targetString = nil;`然後在switch語句中將其設置爲文字。當設置爲字符串時,也不需要釋放targetString。 – Joe 2011-01-26 18:20:27