我有一个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代码中的上述循环中。任何人都可以帮我删除它吗?
答案 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];