0

假设我只想 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。谢谢

4

2 回答 2

3

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

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

您可以重写“代码 2”来避免这样的问题:

NSString *testString = @"Here's a test string in testString!";
NSLog(@"%@", testString);
于 2013-06-11T22:04:09.250 回答
3

代码 1:

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

代码 2:

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

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

于 2013-06-11T22:05:43.817 回答