内存管理附加字符串?

时间:2013-03-02 10:44:27

标签: iphone ios ipad

我有一个iPhone应用程序,我在appdelegate的didfinishlaunch中创建一个数组。像这样:

    for(int i=1;i<53;i++)
        {
            NSString *namestring=[NSString stringWithString:@"avatar"];
           NSString *string = [NSString stringWithFormat:@"%d",i];
            NSString *pngstring=[NSString stringWithString:@".png"];
            string = [string stringByAppendingString:pngstring];

            namestring = [namestring stringByAppendingString:string];

            NSLog(@"%@",namestring);          
        [avtararray addObject:namestring];


        }

工作正常。无论我在appdelegate中使用我的avatarar进行头像工作。但在一种情况下,当我弹回到上一个视图并尝试再次从阵列加载字符串时  NSString *avatarstringt=[[appDelegate.avtararray objectAtIndex:i]description];此处出现错误

  

- [CFString description]:发送到解除分配的实例的消息..

在执行配置文件作业时,我知道泄漏是在appendingstring代码中的上述循环中。任何人都可以帮我删除它吗?

1 个答案:

答案 0 :(得分:1)

首先,从不这样做

NSString *string = [NSString stringWithFormat:@"%d",i];
NSString *pngstring=[NSString stringWithString:@".png"];
string = [string stringByAppendingString:pngstring];

以下陈述是多余的

NSString *namestring=[NSString stringWithString:@"avatar"];
NSString *pngstring=[NSString stringWithString:@".png"];

并且应该写成:

NSString *namestring=@"avatar";
NSString *pngstring=@".png";

您可以使用as:

NSString *namestring=@"avatar";
NSString *numberString = [NSString stringWithFormat:@"%d",i];
NSString *pngstring=@"png";

namestring = [namestring stringByAppendingFormat:@"%@.%@",numberString,pngstring];

即使是最短的代码:

for(NSInteger i=1;i<5;i++){
    NSString *namestring = [NSString stringWithFormat:@"avatar%@.png",@(i)];        
    NSLog(@"%@",namestring);
}

根据rmaddy的建议:你可以使用i作为整数,不需要将其转换为nsnumber

NSString *namestring = [NSString stringWithFormat:@"avatar%d.png",i];