在 Objective-C 中,%@、%d这类符号是格式说明符,用于在NSLog、[NSString stringWithFormat:]等方法中指定数据的输出格式。
📝 常用占位符速查表
| 占位符 | 类型说明 | 示例 |
|---|---|---|
%@ | 对象(调用对象的description方法) | NSLog(@"%@", @"Hello");→Hello |
%d,%i | 有符号整型(int) | NSLog(@"%d", 10);→10 |
%ld | 有符号长整型(long) | NSLog(@"%ld", (long)100);→100 |
%lu | 无符号长整型(unsigned long) | NSLog(@"%lu", (unsigned long)5);→5 |
%f | 浮点数(double/float) | NSLog(@"%f", 3.14);→3.140000 |
%.2f | 保留两位小数的浮点数 | NSLog(@"%.2f", 3.14);→3.14 |
%c | 单个字符(char) | NSLog(@"%c", 'A');→A |
%s | C语言字符串(char*) | NSLog(@"%s", "Hello");→Hello |
%% | 百分号本身 | NSLog(@"%%");→% |
%p | 内存地址 | NSLog(@"%p", &a);→0x7ffee... |
📏 修饰符(控制宽度与精度)
| 用法 | 说明 | 示例 (int num = 10) | 输出结果 |
|---|---|---|---|
%4d | 右对齐,占4个字符宽度 | NSLog(@"%4d", num); | 10 |
%-4d | 左对齐,占4个字符宽度 | NSLog(@"%-4d", num); | 10 |
%04d | 占4位,不足补0 | NSLog(@"%04d", num); | 0010 |
%.2f | 保留两位小数 | NSLog(@"%.2f", 3.14); | 3.14 |
⚠️ 关键提醒
%@vs%s:%@用于 OC 对象(NSString、NSArray等),调用的是对象的description方法。%s用于 C 风格字符串(char *),两者不能混用,否则会 crash 或乱码。
NSInteger/NSUInteger的打印:最安全的写法是:NSInteger→%ld+(long)强转NSUInteger→%lu+(unsigned long)强转
CGFloat的打印:直接使用%f或%.nf即可。
使用场景示例
NSInteger age=25;CGFloat height=175.5;NSString*name=@"张三";NSArray*array=@[@1,@2,@3];// 组合使用NSString*info=[NSString stringWithFormat:@"姓名:%@,年龄:%ld岁,身高:%.1fcm",name,(long)age,height];NSLog(@"%@",info);// 输出:姓名:张三,年龄:25岁,身高:175.5cm// 打印数组NSLog(@"数组内容:%@",array);// 输出:数组内容:(// 1,// 2,// 3// )