NSLog

简介: 原文地址:http://blog.csdn.net/chengyakun11/article/details/7657830 在Objective-C中,NSLog相当于C语言中的printf,常用于文字输出。

原文地址:http://blog.csdn.net/chengyakun11/article/details/7657830

在Objective-C中,NSLog相当于C语言中的printf,常用于文字输出。

NSLog的定义

  NSLog定义在NSObjCRuntime.h中,如下所示:
  void NSLog(NSString *format, …);
  基本上,NSLog很像printf,同样会在console中输出显示结果。不同的是,传递进去的格式化字符是NSString的对象,而不是char *这种字符串指针。

示例

  NSLog可以如下面的方法使用:
  NSLog (@"this is a test");
  NSLog (@"string is :%@", string);
  NSLog (@"x=%d, y=%d", 10, 20);
  但是下面的写法是不行的:
  int i = 12345;
  NSLog( @"%@", i );
  原因是, %@需要显示对象,而int i明显不是一个对象,要想正确显示,要写成:
  int i = 12345;
  NSLog( @"%d", i );

格式

  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位双字



NSLog/NSString 输出格式 Format String Issue


是不是Xcode总是报告NSLog格式输出不对?

Yes, 

 

warning: Format String Issue: Conversion specifies type 'int' but the argument has type 'long'

 

String Format Specifiers

This article summarizes the format specifiers supported by string formatting methods and functions.




Format Specifiers

The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you can also use the “n$” positional specifiers such as %1$@ %2$s. For more details, see the IEEE printf specification. You can also use these format specifiers with the NSLog function.

Table 1  Format specifiers supported by the  NSString formatting methods and CFString formatting functions

Specifier

Description

%@

Objective-C object, printed as the string returned by descriptionWithLocale: if available, or description otherwise. Also works withCFTypeRef objects, returning the result of the CFCopyDescription function.

%%

'%' character

%d%D,%i

Signed 32-bit integer (int)

%u%U

Unsigned 32-bit integer (unsigned int)

%hi

Signed 16-bit integer (short)

%hu

Unsigned 16-bit integer (unsigned short)

%qi

Signed 64-bit integer (long long)

%qu

Unsigned 64-bit integer (unsigned long long)

%x

Unsigned 32-bit integer (unsigned int), printed in hexadecimal using the digits 0–9 and lowercase a–f

%X

Unsigned 32-bit integer (unsigned int), printed in hexadecimal using the digits 0–9 and uppercase A–F

%qx

Unsigned 64-bit integer (unsigned long long), printed in hexadecimal using the digits 0–9 and lowercase a–f

%qX

Unsigned 64-bit integer (unsigned long long), printed in hexadecimal using the digits 0–9 and uppercase A–F

%o%O

Unsigned 32-bit integer (unsigned int), printed in octal

%f

64-bit floating-point number (double)

%e

64-bit floating-point number (double), printed in scientific notation using a lowercase e to introduce the exponent

%E

64-bit floating-point number (double), printed in scientific notation using an uppercase E to introduce the exponent

%g

64-bit floating-point number (double), printed in the style of %e if the exponent is less than –4 or greater than or equal to the precision, in the style of %f otherwise

%G

64-bit floating-point number (double), printed in the style of %E if the exponent is less than –4 or greater than or equal to the precision, in the style of %f otherwise

%c

8-bit unsigned character (unsigned char), printed by NSLog() as an ASCII character, or, if not an ASCII character, in the octal format \\ddd or the Unicode hexadecimal format \\udddd, where d is a digit

%C

16-bit Unicode character (unichar), printed by NSLog() as an ASCII character, or, if not an ASCII character, in the octal format \\ddd or the Unicode hexadecimal format \\udddd, where d is a digit

%s

Null-terminated array of 8-bit unsigned characters. %s interprets its input in the system encoding rather than, for example, UTF-8.

%S

Null-terminated array of 16-bit Unicode characters

%p

Void pointer (void *), printed in hexadecimal with the digits 0–9 and lowercase a–f, with a leading 0x

%L

Length modifier specifying that a following aAeEfFg, or G conversion specifier applies to a long double argument

%a

64-bit floating-point number (double), printed in scientific notation with a leading 0x and one hexadecimal digit before the decimal point using a lowercase p to introduce the exponent

%A

64-bit floating-point number (double), printed in scientific notation with a leading 0X and one hexadecimal digit before the decimal point using a uppercase P to introduce the exponent

%F

64-bit floating-point number (double), printed in decimal notation

%z

Length modifier specifying that a following dioux, or X conversion specifier applies to a size_t or the corresponding signed integer type argument

%t

Length modifier specifying that a following dioux, or X conversion specifier applies to a ptrdiff_t or the corresponding unsigned integer type argument

%j

Length modifier specifying that a following dioux, or X conversion specifier applies to a intmax_t or uintmax_t argument

Platform Dependencies

Mac OS X uses several data types—NSIntegerNSUInteger,CGFloat, and CFIndex—to provide a consistent means of representing values in 32- and 64-bit environments. In a 32-bit environment, NSInteger and NSUInteger are defined as int and unsigned int, respectively. In 64-bit environments, NSIntegerand NSUInteger are defined as long and unsigned long, respectively. To avoid the need to use different printf-style type specifiers depending on the platform, you can use the specifiers shown in Table 2. Note that in some cases you may have to cast the value.

Table 2  Format specifiers for data types

Type

Format specifier

Considerations

NSInteger

%ld or %lx

Cast the value to long

NSUInteger

%lu or %lx

Cast the value to unsigned long

CGFloat

%f or %g

%f works for floats and doubles when formatting; but see below warning when scanning

CFIndex

%ld or %lx

The same as NSInteger

pointer

%p

%p adds 0x to the beginning of the output. If you don't want that, use %lx and cast to long.

long long

%lld or %llx

long long is 64-bit on both 32- and 64-bit platforms

unsigned long long

%llu or %llx

unsigned long long is 64-bit on both 32- and 64-bit platforms

The following example illustrates the use of %ld to format an NSInteger and the use of a cast.

NSInteger i = 42;
printf("%ld\n", (long)i);

In addition to the considerations mentioned in Table 2, there is one extra case with scanning: you must distinguish the types for float and double. You should use %f for float, %lf for double. If you need to use scanf (or a variant thereof) with CGFloat, switch to double instead, and copy the double toCGFloat.

CGFloat imageWidth;
double tmp;
sscanf (str, "%lf", &tmp);
imageWidth = tmp;

It is important to remember that %lf does not represent CGFloat correctly on either 32- or 64-bit platforms. This is unlike %ld, which works for long in all cases.

相关文章
|
存储 监控 安全
什么是EDR?EDR做的比较好的厂商有哪些?
SentinelOne作为EDR市场的领导者和新兴XDR技术的先驱,我们经常被问到这意味着什么以及它最终如何有助于实现更好的客户成果。本文旨在澄清关于XDR以及与EDR、SIEM和SOAR相比的一些常见问题。
1079 18
什么是EDR?EDR做的比较好的厂商有哪些?
|
资源调度 监控 负载均衡
浅析PM2实用入门指南
PM2 是一个守护进程管理器,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡等功能。使用起来也是非常简单
1851 0
|
传感器 存储 IDE
Arduino的PID库
Arduino的PID库是一个用于实现比例-积分-微分(PID)控制算法的软件库。它能帮助开发者精确控制各种需要调节的系统,如温度、速度等,通过自动调整参数来达到或维持设定值。使用简单,适用于各种Arduino项目。
|
机器学习/深度学习 人工智能 自然语言处理
LangChain安装和入门案例
LangChain安装和入门案例
834 0
|
JavaScript 前端开发 测试技术
Vite2 + Vue3 + TypeScript + Pinia 搭建一套企业级的开发脚手架
Vite2 + Vue3 + TypeScript + Pinia 搭建一套企业级的开发脚手架
1048 88
Vite2 + Vue3 + TypeScript + Pinia 搭建一套企业级的开发脚手架
|
存储 安全 搜索推荐
什么是PDS
简述什么是PDS以及基于PDS搭建的企业网盘的体验感受
|
运维 Serverless 测试技术
【知识点】如何快速开发、部署 Serverless 应用?
本文将详细介绍如何开发和部署 Serverless 应用,并通过阿里云函数计算控制台与开发者工具 Serverless Devs 进行应用的初始化、部署;最后分享应用的调试,通过科学发布、可观测性等介绍应用的部署和运维总结,进而实现从应用初始化到调试、发布、运维基础流程、核心步骤的探索。
【知识点】如何快速开发、部署 Serverless 应用?
|
机器学习/深度学习 编解码 人工智能
7 Papers & Radios | 新型Transformer架构解决多智能体强化学习问题;ICRA 2022最佳论文出炉(1)
7 Papers & Radios | 新型Transformer架构解决多智能体强化学习问题;ICRA 2022最佳论文出炉
839 0
|
机器学习/深度学习 搜索推荐 算法
【推荐系统】美团外卖推荐场景的深度位置交互网络DPIN的突破与畅想
美团基础研发机器学习平台训练引擎团队,联合到家搜推技术部算法效能团队、NVIDIA DevTech团队,成立了联合项目组。目前在美团外卖推荐场景中进行了部署,多代模型全面对齐算法的离线效果,对比之前,优化后的CPU任务,性价比提升了2~4倍。
809 0
【推荐系统】美团外卖推荐场景的深度位置交互网络DPIN的突破与畅想
|
编解码 边缘计算 搜索推荐
阿里云郝冲:技术创新+市场需求 驱动直播产业升级
商业驱动技术进步,技术拓展商业边界
834 0
阿里云郝冲:技术创新+市场需求 驱动直播产业升级
下一篇
oss云网关配置