为什么"format指定类型id但参数的类型为int"崩溃

ylo*_*esy 1 xcode runtime objective-c ios

NSLog(@"%@",2);
Run Code Online (Sandbox Code Playgroud)

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

产量 在此输入图像描述

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

Mik*_*ley 7

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

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

它崩溃的原因是因为您将值2传递给占位符,该占位符正在寻找指向内存地址的指针.这就是"糟糕访问"的含义.的%@,因为你没有提供准确的内存地址指针不能发现任何东西.

这里的修复是使用

NSLog(@"%d",2);
Run Code Online (Sandbox Code Playgroud)