Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何使用变量进行NSLog_Objective C - Fatal编程技术网

Objective c 如何使用变量进行NSLog

Objective c 如何使用变量进行NSLog,objective-c,Objective C,要打印*新闻字符串,下面的正确格式应该是什么 NSString *newString = @"Hello this is a string!"; NSLog(@newString); @符号只是指定一些常见Objective-C对象的简写@“…”表示字符串(NSString,具体而言,它不同于常规的C字符串),@[…]表示数组(NSArray),@{…}表示字典(NSDictionary) 在第一行,您已经使用@符号指定了一个NSString对象newString现在是一个NSString实例

要打印
*新闻字符串
,下面的正确格式应该是什么

NSString *newString = @"Hello this is a string!";
NSLog(@newString);

@
符号只是指定一些常见Objective-C对象的简写
@“…”
表示字符串(
NSString
,具体而言,它不同于常规的C字符串),
@[…]
表示数组(
NSArray
),
@{…}
表示字典(
NSDictionary

在第一行,您已经使用
@
符号指定了一个
NSString
对象
newString
现在是一个
NSString
实例。在第二行,您只需给出它的变量名:

NSLog(新闻字符串)

理论上,您可以只给出变量名,但这是一种危险的方法。如果
newString
有任何格式说明符,您的应用程序可能会崩溃/混乱(或访问不应该访问的内容),因为
NSLog
将尝试读取与格式说明符对应的参数,但参数不存在。安全的解决方案是
NSLog(@“%@”,newString)
NSLog
的第一个参数现在是硬编码的,无法更改。我们现在知道它只需要一个参数,我们提供的参数是,
newString
,所以我们是安全的


因为您已经指定了一个字符串,并且只是将该实例传递给
NSLog
,所以不需要再次使用
@
符号。

NSLog
的工作原理与C
printf
的工作原理非常相似,还添加了
%
字符串格式说明符,该说明符用于对象。作为对象,
%@
是正确的格式:

NSString *newString = @"Hello this is a string!";
NSLog(@"%@", newString);
尽管看起来很诱人,但千万不要这样做

NSLog(newString); //NONONONONO!
因为这是一种可怕的做法,可能会导致意外的崩溃(更不用说安全问题)


关于这个主题的更多信息:

这可能是不安全的,你不应该养成这个习惯<代码>NSLog(@“%@”,新闻字符串)是正确的。看,NSLOG不会处理这个吗?它无论如何都不接受常规的C字符串,您需要提供一个NSString,它无论如何都应该被控制。如果
newString
是@“%@%@%@%@%@%@%@”,该怎么办。繁荣是什么。