Objective C的ANALog和Printf语句之间的区别

时间:2012-01-25 17:04:58

标签: iphone objective-c printf nslog

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

为什么所有开发者都使用NSLog代替Printf

两者看起来相似,但内部工作的区别是什么?

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

4 个答案:

答案 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,但它做得更多:

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

答案 2 :(得分:9)

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

答案 3 :(得分:3)

我发现NSLogprintf之间存在两个主要差异:

  1. NSLog通过NSString扩展程序支持%@个对象;

  2. 此外,NSLog会自动添加时间和处理数据(例如,2012-01-25 17:52:10.479流程[906:707])