gpt4 book ai didi

iphone - 追加字符串时的内存管理?

转载 作者:行者123 更新时间:2023-11-29 13:17:56 25 4
gpt4 key购买 nike

我有一个 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 中使用我的 avatararray 做头像工作。但在一种情况下,当我弹出回到上一个 View 并尝试再次从数组加载字符串时
NSString *avatarstringt=[[appDelegate.avtararray objectAtIndex:i]description];此处出现错误并崩溃

-[CFString description]: message sent to deallocated instance..

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

最佳答案

首先,永远不要这样做

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

关于iphone - 追加字符串时的内存管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15173551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com