为什么" format指定类型id,但参数的类型为int"紧急

时间:2016-05-31 09:17:52

标签: ios objective-c xcode runtime

NSLog(@"%@",2);

警告:format指定类型id,但参数的类型为int

输出enter image description here

Xcode显示警告,但在运行时,为什么此代码会导致崩溃?谢谢!

2 个答案:

答案 0 :(得分:6)

id是指向Objective-C对象的指针。防爆。 NSString *NSDate *。因此,当您使用%@时,编译器需要一个指向存储对象的内存地址的指针。

int是“原始”值类型。它不是一个对象。它是存储在内存中的实际值,并直接传递给NSLog语句中的参数。

它崩溃的原因是因为您将值2传递给占位符,该占位符正在寻找指向内存地址的指针。这就是“糟糕访问”的含义。 %@无法找到任何内容,因为您没有提供准确的内存地址指针。

此处的修复是使用

NSLog(@"%d",2);

答案 1 :(得分:1)

使用

 NSLog(@"%d",2);

2是一个int值

%@用于id类型