NSString类 - 在线示例代码

时间:2013-06-11 21:57:29

标签: objective-c class nsstring

让我说我只想要NSLog一个字符串 - 有人可以解释之间的区别: 代码1:

NSString *testString;  
testString = [[NSString alloc] init];  
testString = @"Here's a test string in testString!";  
NSLog(@"testString: %@", testString); 

和代码2:

NSString *testString = @"Here's a test string in testString!";
NSLog(testString)

我们假设我正在使用ARC。 感谢

2 个答案:

答案 0 :(得分:3)

我意识到这可能不是你所要求的,但第二个例子是一个不好的做法。编译器需要NSLog的字符串文字。这不是必需的,但可以防止潜在的安全问题(根据警告)。第一个参数用printf格式化程序解释。如果您没有为您的格式(第一个参数)使用字符串文字,并且该字符串是用户输入的,那么用户可能会通过传递无效的格式数据来使您的应用程序崩溃。

您可以在此处阅读有关此漏洞的信息:http://en.wikipedia.org/wiki/Format_string_attack

您可以重写“代码2”以避免此问题:

NSString *testString = @"Here's a test string in testString!";
NSLog(@"%@", testString);

答案 1 :(得分:3)

代码1:

您正在创建然后丢弃一个空的NSString。然后使用格式字符串记录字符串文字。

代码2:

您正在尝试记录字符串文字(通过变量)。

您理想的代码是两者的组合,您不会创建未使用的字符串,而是在记录时使用格式字符串。