1

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

    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 中使用我的头像数组进行头像工作。但在一种情况下,当我弹回上一个视图并尝试再次从数组中加载字符串时,
NSString *avatarstringt=[[appDelegate.avtararray objectAtIndex:i]description];它会因错误而崩溃

-[CFString 描述]:发送到已释放实例的消息..

在进行配置文件工作时,我知道泄漏位于附加字符串代码中的上述循环中。有人可以帮我删除它吗?

4

1 回答 1

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";

您可以用作:

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];  
于 2013-03-02T11:14:06.027 回答