【问题标题】:why "format specifies type id but the argument has type int" crash为什么“格式指定类型 id 但参数具有 int 类型”崩溃
【发布时间】:2016-09-29 05:25:11
【问题描述】:
NSLog(@"%@",2);

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

输出

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

【问题讨论】:

  • 因为你传递了一个无效的参数?
  • 它在等待一个对象,而你放置了一个原始 int。改用%d,而不是@(2)
  • 了解详情请查看documentation

标签: ios objective-c xcode runtime


【解决方案1】:

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

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

它崩溃的原因是因为您将值 2 传递给正在寻找指向内存地址的指针的占位符。这就是“不良访问”的意思。 %@ 找不到任何东西,因为您没有提供准确的内存地址指针。

这里的解决方法是使用

NSLog(@"%d",2);

【讨论】:

    【解决方案2】:

    请使用

     NSLog(@"%d",2);
    

    2 是一个 int 值

    %@ 用于 id 类型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 2015-06-10
      • 2017-09-04
      • 2013-01-31
      • 1970-01-01
      相关资源
      最近更新 更多