使用NSString时发生内存泄漏

时间:2012-06-04 07:30:26

标签: iphone objective-c memory-management

我有一个关于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

3 个答案:

答案 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:@"  "];