Iphone ObjectiveC的NSLog和Printf语句之间的差异
我想知道Objective-C中的Iphone ObjectiveC的NSLog和Printf语句之间的差异,iphone,objective-c,printf,nslog,Iphone,Objective C,Printf,Nslog,我想知道Objective-C中的NSLog和Printf语句之间的区别(用于应用目的…!) 为什么所有开发人员都使用NSLog而不是Printf 两者看起来相似,但内部工作有什么不同 在哪一点上可以区分它们?从开发人员的角度来看,最大的区别在于NSLog通过%@格式支持Objective-C对象类型。NSLog也会写入stderr,而printf会写入stdout。 printf()是一个C标准库函数,接受C字符串常量(const char*)作为其格式参数printf()写入标准输出 >代
NSLog
和Printf
语句之间的区别(用于应用目的…!)
为什么所有开发人员都使用NSLog
而不是Printf
两者看起来相似,但内部工作有什么不同
在哪一点上可以区分它们?从开发人员的角度来看,最大的区别在于NSLog通过%@格式支持Objective-C对象类型。NSLog也会写入stderr,而printf会写入stdout。
是一个C标准库函数,接受C字符串常量(printf()
)作为其格式参数const char*
写入标准输出printf()
<> >代码> NSCORE()/Case>是一个基础函数,接受一个常量NSCOND作为格式,并且具有扩展格式说明符集合(例如,<代码> Prtff())/>代码>不打印由“代码> %@ < /代码>,<代码> NSCORE())/>代码>所指定的对象。
NSLog()
还将在打印实际格式并写入sdterr之前打印进程名称和日期
基本上,我们可以说NSLog()
是一个扩展的printf()
用于Objective-C(更准确地说,是Cocoa和Cocoa Touch)和特定用途的样式功能。我看到了
NSLog
和printf
之间的两个主要区别:
NSLog
通过%@
扩展支持NSString
对象NSLog
自动添加时间和过程数据(例如,2012-01-25 17:52:10.479过程[906:707])NSLog类似于printf,但它做的更多:
- 时间戳被添加到输出中
- 输出被发送到Xcode控制台,或者任何定义为stderr的地方
- 它接受所有printf说明符,但也接受对象的
运算符,该运算符显示对象的@
方法提供的字符串。(描述
是NSObject的一部分,因此所有对象都可以覆盖它以返回描述该对象的字符串)description
- 输出还被发送到苹果系统日志(ASL),这是苹果版本的syslogd。这些数据可以由使用C API的其他应用程序读取,也可以由使用应用程序“控制台”的OS X用户读取
NSLog通过%@扩展支持对象,隐式调用该对象的-(NSString*)描述;方法
第三大区别是NSLog将输出发送到stderr,其中printf将输出发送到stdout。问题是,这个Apple系统日志是否与使用os_Log
结构的日志同义。显然,它们是不同的。