代码之家  ›  专栏  ›  技术社区  ›  Wayne Lo

对于目标C,C中的对象等价于什么?

  •  0
  • Wayne Lo  · 技术社区  · 14 年前

    在C我可以申报 object o; 然后我可以分配 o=(float)5.0; o="a string." 目标C是否有等价物?我试着用 id 但它不采用像float或integer这样的基元类型。谢谢你的帮助。

    5 回复  |  直到 8 年前
        1
  •  11
  •   Quinn Taylor    14 年前

    在clr中,objective-c没有“统一类型系统”。换句话说,作为c的超集,objective-c的原始类型是 不同的 动物总比对象实例多。这个 id 类型可以将引用(实际上是OS X/iPhone Objective-C运行时中的指针)存储到任何对象实例。C的基本类型(例如 int , float 等)必须包裹 NSValue NSNumber 分配给类型 身份证件 . 当然,这正是C编译器所做的。只是在c中,您不必显式地进行(un)装箱转换。

    很快,就像代码一样

    float val;
    id obj = [NSNumber numberWithFloat:val];
    ...
    float v = [obj floatValue];
    

    如果不幸的是按现代标准冗长的话,将成为第二天性。

        2
  •  3
  •   Carl Norum    14 年前

    其实没有这样的事。你可以使用 NSNumber NSValue 将本机数据类型作为对象处理。 NSString 做字符串。您可以将所有这些分配给 id 类型化变量,但需要使用正确的类创建它们 init 方法。

        3
  •  3
  •   Matt Greer    14 年前

    你说得对, id 仅适用于objc对象引用。如果要用ID引用引用一个int,则需要将其装箱到 NSNumber . 顺便说一句,C也在对这些原语进行装箱,它只是自动进行装箱。

        4
  •  2
  •   anthony    14 年前

    回到我那一天,我们不得不在雪中走15英里,上坡,才能使用 void pointers . 哦,我们没有StackOverflow!

        5
  •  1
  •   ssd352    8 年前

    实际上,C数据类型只是它们各自类的别名,这就是为什么可以将它们分配给对象类型的原因。 例如,int实际上是一个名为int32的类。

    正如@barry之前提到的,客观-c并不是这样的。