Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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
Iphone ObjectiveC的NSLog和Printf语句之间的差异_Iphone_Objective C_Printf_Nslog - Fatal编程技术网

Iphone ObjectiveC的NSLog和Printf语句之间的差异

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()写入标准输出 >代

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

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

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


在哪一点上可以区分它们?

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

  • printf()
    是一个C标准库函数,接受C字符串常量(
    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说明符,但也接受对象的
      @
      运算符,该运算符显示对象的
      描述
      方法提供的字符串。(
      description
      是NSObject的一部分,因此所有对象都可以覆盖它以返回描述该对象的字符串)
    • 输出还被发送到苹果系统日志(ASL),这是苹果版本的syslogd。这些数据可以由使用C API的其他应用程序读取,也可以由使用应用程序“控制台”的OS X用户读取

    更准确地说:
    NSLog通过%@扩展支持对象,隐式调用该对象的-(NSString*)描述;方法
    第三大区别是NSLog将输出发送到stderr,其中printf将输出发送到stdout。问题是,这个Apple系统日志是否与使用
    os_Log
    结构的日志同义。显然,它们是不同的。