让我说我只想要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。 感谢
答案 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:
您正在尝试记录字符串文字(通过变量)。
您理想的代码是两者的组合,您不会创建未使用的字符串,而是在记录时使用格式字符串。