我想知道Objective-C中NSLog
和Printf
语句之间的区别(用于应用目的......!)
为什么所有开发者都使用NSLog
代替Printf
?
两者看起来相似,但内部工作的区别是什么?
他们可以在哪个方面加以区分?
答案 0 :(得分:31)
printf()
是C标准库函数,接受C字符串常量(const char *
)作为其格式参数。 printf()
写信给stdout。
NSLog()
是一个Foundation函数,接受一个常量NSString作为格式,并且具有扩展格式说明符集(例如,printf()
不打印由{{1}指定的对象},%@
。
NSLog()
还会在打印实际格式之前打印进程名称和日期,并写入sdterr。
基本上,我们可以说NSLog()
是一个扩展NSLog()
Objective-C的样式函数(更准确地说,Cocoa和Cocoa Touch)和特定用途。
答案 1 :(得分:26)
NSLog就像一个printf,但它做得更多:
@
运算符用于显示对象的description
方法提供的字符串的对象。 (description
是NSObject的一部分,因此所有对象都可以覆盖它以返回描述对象的字符串。答案 2 :(得分:9)
从开发人员的角度来看,最大的区别是NSLog通过%@格式支持Objective-C对象类型。 NSLog也写入stderr,而printf写入stdout。
答案 3 :(得分:3)
我发现NSLog
和printf
之间存在两个主要差异:
NSLog
通过NSString
扩展程序支持%@
个对象;
此外,NSLog
会自动添加时间和处理数据(例如,2012-01-25 17:52:10.479流程[906:707])