这是我想出的代码:

NSString *randomString = @"";
for (int x=0;x<NUMBER_OF_CHARS;x++) {
  randomString = [randomString stringByAppendingFormat:@"%c", (char)(65 + (arc4random() % 25))];
}
return randomString;

编辑:

回答评论:

1)我最关心的是代码的简洁性。

2)我还想知道,如果NUMBER_OF_CHARS是一个高数字(例如40),则对于猜测字符串和/或防止冲突是否安全-不是针对此应用程序,而是在其他情况下。

3)另外,如果有一天我想制作大量字符串,有没有更快的方法?这似乎会很慢,因为它每次通过循环都会创建一个对象。

最佳答案

如果 NUMBER_OF_CHARS 是编译时常量,则可以通过避免重复创建对象来加速代码。您也可以将程序缩短一行:

char data[NUMBER_OF_CHARS];
for (int x=0;x<NUMBER_OF_CHARS;data[x++] = (char)('A' + (arc4random_uniform(26))));
return [[NSString alloc] initWithBytes:data length:NUMBER_OF_CHARS encoding:NSUTF8StringEncoding];

据我所知,arc4random_uniform对于加密应用程序应该足够好,但是如果您打算保护的数据对您或您的客户而言具有很高的值(value),那么您可能需要咨询加密专家。

编辑: 编辑以回应 nielsbot 的评论。

10-04 18:58