Objective c For循环会影响NSString的完整性吗?

Objective c For循环会影响NSString的完整性吗?,objective-c,Objective C,不确定为什么一个代码段工作而另一个失败: 按下按钮3次后,此操作失败(应用程序退出)(此代码在“按下按钮”时执行): 注意:在头文件中,sUser定义为NSString,charcode是int 这是可行的(此代码段在“按下按钮”时执行): intr; 字符串=@; 对于(i=0;i

不确定为什么一个代码段工作而另一个失败:

按下按钮3次后,此操作失败(应用程序退出)(此代码在“按下按钮”时执行):

注意:在头文件中,sUser定义为NSString,charcode是int

这是可行的(此代码段在“按下按钮”时执行):

intr;
字符串=@;
对于(i=0;i

注意:在头文件中,字符串定义为NSString

每次通过循环时,您都为字符串分配不同的字符串。如果要更改现有字符串,应使用NSMutableString和
-appendString:
-appendFormat:
,如下所示:

int r;
theString = [NSMutableString string];

for(i = 0; i < iDigits ; i++)
{
    r = rand() % 26;
   [theString appendFormat: @"%c", r + 65];
}
intr;
字符串=[NSMutableString];
对于(i=0;i

编辑:对不起,我忘了回答实际问题,这个问题问第一个代码段为什么不起作用。jrturton在这里有一个正确的答案:你没有保留字符串。由于字符串是自动释放的,除非您保留它,否则它将被释放和释放。上述代码也是如此——如果您打算保留生成的字符串,则需要保留它。

在第一个示例中,您正在创建一个自动释放的字符串,该字符串将在再次按下按钮时释放。在第二个示例中,您在一个循环中完成所有操作,这意味着自动释放池没有被耗尽

如果sUser是保留属性,则第一个样本应为

self.sUser = [NSString stringWithFormat: @"%@ %c", sUser, charcode];

崩溃的原因是,如果sUser在标题中定义,这意味着它属于您的类,需要分配给保留的字符串。如果您有sUser的财产,请执行此操作

self.sUser = [NSString stringWithFormat: @"%@ %c", sUser?:@"", charcode];
否则

NSString *temp = [NSString stringWithFormat: @"%@ %c", sUser?:@"", charcode];
[sUser release];
sUser = [temp retain];

现在有了一种更有效的附加字符串的方法。

当应用程序崩溃时,你会得到什么样的回溯?
self.sUser = [NSString stringWithFormat: @"%@ %c", sUser?:@"", charcode];
NSString *temp = [NSString stringWithFormat: @"%@ %c", sUser?:@"", charcode];
[sUser release];
sUser = [temp retain];