我有一个关于NSString使用的内存管理问题。请看下面的简单代码:
NSString *catSeq = [[NSString alloc] init];
for (NSString *cat in cats) {
catSeq = [catSeq stringByAppendingFormat:cat];
catSeq = [catSeq stringByAppendingFormat:@" "];
}
catLabel.text = catSeq;
[catSeq release];
// This code expresses what all I want to do, but Memory leak happened
// below I delete lines of code to find out the reason
-----------------------------------------------------
NSString *catSeq = [NSString string];
for (NSString *cat in cats) {
catSeq = [catSeq stringByAppendingFormat:cat];
catSeq = [catSeq stringByAppendingFormat:@" "];
}
catLabel.text = catSeq;
// Memory leak not happened
-----------------------------------------------------
NSString *catSeq = [[NSString alloc] init];
catLabel.text = catSeq;
[catSeq release];
// Memory leak not happened
答案 0 :(得分:1)
尝试这种方式,自动释放。
NSString *catSeq = [[[NSString alloc] init]autorelease];
for (NSString *cat in cats) {
catSeq = [catSeq stringByAppendingString:cat];
catSeq = [catSeq stringByAppendingString:@" "];
}
catLabel.text = catSeq;
答案 1 :(得分:1)
将您的代码更改为:
NSString * catSeq = @“”;
for(NSString * cat in cats){
catSeq = [catSeq stringByAppendingFormat:cat]; catSeq = [catSeq stringByAppendingFormat:@" "];
}
catLabel.text = catSeq;
答案 2 :(得分:0)
使用其中一种方法
catSeq = [catSeq stringByAppendingFormat:@"%@",cat];
catSeq = [catSeq stringByAppendingFormat:@"%@",@" "];
或
catSeq = [catSeq stringByAppendingString:cat];
catSeq = [catSeq stringByAppendingString:@" "];