在 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
// )