代码之家  ›  专栏  ›  技术社区  ›  Moshe

int与nsnumber与nsinteger

  •  23
  • Moshe  · 技术社区  · 14 年前

    我有一行代码,根据数据类型“day”和“1”,它们的工作方式会有所不同。尽管稍后我会检查源代码,但我相信它是以下内容。

    day = day + 1;

    这有道理吗?有什么区别?

    4 回复  |  直到 10 年前
        1
  •  45
  •   Thomas Zoechling    14 年前

    NSInteger 是描述整数的类型定义-但它不等价于 int 在64位平台上。
    您可以通过命令单击来检查typedef NS-整型 在XCODE中。
    NS-整型 定义为 int 当构建32位应用程序时, long 对于64位应用程序。
    大多数情况下,你可以用nsinteger替换int,但是在这样做时需要考虑一些事情。
    Apple's 64-Bit Transition Guide for Cocoa 有一些关于这个的信息。

    NSNumber 是一个帮助您将数字类型存储为对象的类。它具有在不同类型之间转换的方法和检索数值的字符串表示形式的方法。
    如果使用变量 day 类型的 NSNumber* 正如您在示例中所做的那样,您没有修改 白天 但它的记忆地址。

    如果你使用的是时间值,你也可以看看 NSDate .

        2
  •  9
  •   Iulian Onofrei Denis Oliveira    10 年前

    NSInteger 是一个简单的整数, NSNumber 是一个对象,其中as int 是基元数据类型。

    nsinteger只不过是长整数的同义词。

    如果需要将数字存储在某个地方,请使用nsnumber。如果要进行计算、循环等,请使用nsinteger、nsinteger或int。

    您可以使用以下方法将nsinteger包装成nsnumber:

    NSNumber *NumberToStore = @(21);
    

    然后用以下方法取回:

    NSInteger retrievingInteger = [NumberToStore integerValue];
    
        3
  •  2
  •   walkytalky    14 年前

    1 是一个文本,如果合适的话,编译器将使其成为适当的数字类型。

    但是,请注意, NSInteger int 对大多数意图和目的来说都是一样的, NSNumber 是对象类型。对于这种情况,您的代码没有意义(并且不应该在没有警告的情况下编译)。

    (实际上,在某些情况下,从指针算术的角度来看,这是有意义的,但这完全不是你想要的。)

    对于nsnumber案例,您需要如下内容:

    day = [NSNumber numberWithInt:[day intValue] + 1];
    
        4
  •  2
  •   kubi    14 年前

    NSInteger int 是等价的, NSNumber 是用于存储基元数字类型(int、long、float等)的对象。

    如果 day 是一个 NSinteger 如果它是一个 数字对象 .