ObjectiveC的NSLog和Printf语句之间的区别

Rus*_*311 21 iphone printf objective-c nslog

我想知道Objective-C中NSLogPrintf语句和语句之间的区别(用于应用程序......!)

为什么所有开发人员都使用NSLog而不是Printf

两者看起来相似,但内部工作有什么不同?

他们可以在哪个方面加以区分?

小智 31

  • printf()是一个C标准库函数,接受一个C字符串constant(const char *)作为其格式参数.printf()写给stdout.

  • NSLog()是一个基础函数,接受一个常量NSString作为格式,并具有扩展格式说明符集(例如,printf()不打印由%@,指定的对象NSLog()). NSLog()在打印实际格式并写入sdterr之前,还会打印进程名称和日期.

基本上,我们可以说这NSLog()printf() Objective-C(更准确地说,Cocoa和Cocoa Touch)和特定用途的扩展Style函数.


Abi*_*ern 26

NSLog就像一个printf,但它做得更多:

  • 时间戳将添加到输出中.
  • 输出发送到Xcode控制台,或者定义为stderr的任何内容.
  • 它接受所有printf说明符,但它也接受@运算符,用于显示对象description方法提供的字符串的对象.(description是NSObject的一部分,因此所有对象都可以覆盖它以返回描述对象的字符串).
  • 输出也会发送到Apple系统日志(ASL),这是Apple的syslogd版本.其他应用程序可以使用C API或使用应用程序"Console"的OS X用户读取此数据.


Cat*_*Man 9

从开发人员的角度来看,最大的区别是NSLog通过%@格式支持Objective-C对象类型.NSLog也写入stderr,而printf写入stdout.