下面打印的正确格式应该是什么*newString
?
NSString *newString = @"Hello this is a string!";
NSLog(@newString);
下面打印的正确格式应该是什么*newString
?
NSString *newString = @"Hello this is a string!";
NSLog(@newString);
NSLog
几乎可以像 C 一样工作printf
,并添加了%@
用于对象的字符串格式说明符。作为NSString
一个对象,%@
使用正确的格式:
NSString *newString = @"Hello this is a string!";
NSLog(@"%@", newString);
尽管看起来很诱人,但永远不要
NSLog(newString); //NONONONONO!
因为这是一种糟糕的做法,可能会导致意外崩溃(更不用说安全问题了)。
有关该主题的更多信息:警告:“格式不是字符串文字,也没有格式参数”
该@
符号只是指定一些常见的 Objective-C 对象的简写。@"..."
表示一个字符串(NSString
具体来说,它不同于常规的C字符串),@[...]
表示一个数组(NSArray
),@{...}
表示一个字典(NSDictionary
)。
在第一行,您已经使用符号指定了一个NSString
对象。现在是一个实例。在第二行,你可以给它的变量名:@
newString
NSString
NSLog(newString);
理论上你可以只给出变量名,但这是一种危险的方法。如果newString
有任何格式说明符,您的应用程序可能会崩溃/混乱(或访问不应该访问的内容),因为NSLog
会尝试读取与格式说明符对应的参数,但参数不存在。安全的解决方案是NSLog(@"%@", newString);
. 的第一个参数NSLog
现在是硬编码的,不能更改。我们现在知道它将期望一个参数,我们正在提供该参数newString
,所以我们是安全的。
因为您已经指定了一个字符串并且只是将该实例传递给NSLog
,所以您不再需要该@
符号。