为什么 "format specifies type id but the argument has type int" 崩溃
why "format specifies type id but the argument has type int" crash
NSLog(@"%@",2);
警告:格式指定了类型 id 但参数的类型为 int
输出
Xcode显示警告,但在运行时,为什么这段代码会导致崩溃?谢谢!
请使用
NSLog(@"%d",2);
2 是一个整数值
%@ 用于 id 类型
id
是指向 Objective-C 对象的指针。前任。 NSString *
或 NSDate *
。因此,当您使用 %@
时,编译器需要一个指向存储对象的内存地址的指针。
int
是 "primitive" 值类型。它不是一个对象。它是存储在内存中的实际值,直接传递给 NSLog 语句中的参数。
它崩溃的原因是因为您将值 2 传递给正在查找指向内存地址的指针的占位符。这就是 "bad access" 的意思。 %@
找不到任何内容,因为您没有提供准确的内存地址指针。
这里的修复是使用
NSLog(@"%d",2);
NSLog(@"%@",2);
警告:格式指定了类型 id 但参数的类型为 int
输出
Xcode显示警告,但在运行时,为什么这段代码会导致崩溃?谢谢!
请使用
NSLog(@"%d",2);
2 是一个整数值
%@ 用于 id 类型
id
是指向 Objective-C 对象的指针。前任。 NSString *
或 NSDate *
。因此,当您使用 %@
时,编译器需要一个指向存储对象的内存地址的指针。
int
是 "primitive" 值类型。它不是一个对象。它是存储在内存中的实际值,直接传递给 NSLog 语句中的参数。
它崩溃的原因是因为您将值 2 传递给正在查找指向内存地址的指针的占位符。这就是 "bad access" 的意思。 %@
找不到任何内容,因为您没有提供准确的内存地址指针。
这里的修复是使用
NSLog(@"%d",2);