A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© lxyz22zp 中级黑马   /  2014-12-9 19:44  /  1197 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在看C视屏,看OC书OC里用的都是NSlog,不知道他俩啥区别

2 个回复

倒序浏览
这是自己的一些总结

NSLog与printf的区别

  (1)NSLog定义在NSObjCRuntime.h中,如下所示:

                          void NSLog(NSString *format, …);

        (2)printf定义在stdio.h中,如下所示

                        _CRTIMP int __cdecl printf (const char*, ...);

                                _CRTIMP 是个宏定义,是下面的简写

                                C run time implement “C运行库的实现”的意思,个人理解就是标志此函数是个库函数。
                                int 表示返回值是int型。
                                __cdecl 是一个编译规则标志宏定义,给编译器看的,有了这个标志编译器在编译此函数时按照这个规范去编译。
                                printf是函数名。
                                const char*是printf函数的第一个参数,显然是指向“只读”字符的字符指针。
                                ...表示不定长参数,即函数的参数个数是不确定的。__cdecl编译规则支持具有不定参数的函数。有了这个定义,我们在使用printf函数时才可以""后面的参数数目不等。
  基本上,NSLog很像printf,同样会在console中输出显示结果。不同的是,传递进去的格式化字符是NSString的对象,而不是char *这种字符串指针。

  (3)NSLog可以如下面的方法使用:
                          NSLog (@"NSLog  test");

                         NSLog (@"string is :%@", string);

                          NSLog (@"x=%d, y=%d", 1, 2);

  但是下面的写法是不行的:

                          int i = 1;

                        char a = 'c';

                          NSLog( @"%@ %@", i, a );        

                          %@需要显示对象,而int i明显不是一个对象,要想正确显示,要写成:

                         int i = 1;

                        char a = 'c';

                          NSLog( @"%d %c", i, a );

        (4)printf 可以有如下面的方法使用:

                        printf(" test");

                        printf("%d", 1);

                        printf("%s", str);  //  str这里是定义的一个字符串;

                但是没有%@



  (5) NSLog的格式如下所示:
                          %@ 对象,%d, %i 整数,%u 无符整形,%f 浮点/双字,%x, %X 二进制整数,%o 八进制整数,%zu size_t%p 指针,%e 浮点/双字 (科学计算),%g 浮点/双字 ,%s C 字符串,%.*s Pascal字符串,%c 字符,%C unichar%lld 64位长整数,(long long)%llu 无符64位长整数,%Lf 64位双字。

        (6)printf的格式如下所示:

                        %c                一个字符 

                        %d    有符号十进制整数 

                               %e    浮点数、e-记数法
                        %E    浮点数、E-记数法
                             %f    浮点数、十进制记数法  
                        %g    根据数值不同自动选择%f或%e.
                               %G    根据数值不同自动选择%f或%e.
                        %i               有符号十进制数(与%d相同)
                        %o    无符号八进制整数
                               %p    指针    
                        %s    字符串
                        %u    无符号十进制整数
                        %x    使用十六进制数字0f的无符号十六进制整数 
                        %X    使用十六进制数字0f的无符号十六进制整数
                        %%    打印一个百分号
回复 使用道具 举报
NSLog自动换行,并且是OC的特有方法,使用时需要加@。printf是C语言的方法,不支持自动换行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马