【问题标题】:Why is there NSInteger and not NSLong or even NSLongLong? [duplicate]为什么有 NSInteger 而没有 NSLong 甚至 NSLongLong? [复制]
【发布时间】:2017-05-25 04:05:01
【问题描述】:

NSInteger 是整数对象。那么肯定应该有长对象吗?

【问题讨论】:

  • NSInteger 不是对象。它是一种原始类型
  • NSInteger 不是对象?啊,是的,我和 NSNumber 搞混了。
  • 这是一个常见的错误
  • 我希望它们的名称不同。像 CGInteger 什么的。 NS 通常用于对象。
  • @GeneCode NS 前缀用于通常来自 Foundation 和 AppKit 框架的所有内容——包括 NSRectNSPoint 和其他 C 类型和结构。 CG是CoreGraphics框架的前缀,不相关。

标签: objective-c nsinteger


【解决方案1】:

NSInteger 是基础类型,as you can see here

还有其他有用的原始类型,如 NSRect、NSSize 等。

Apple 只是选择不在基础中定义 NSLong 或 NSLongLong 类型。

有关何时使用 NSInteger(以及它们背后的考虑因素)的更多信息,请参见 in this related question

【讨论】:

    【解决方案2】:

    NSIntegerNSUInteger 是特定于平台的,因此在 32 位系统上声明为 int,在 64 位系统上声明为 long。

    【讨论】:

    • 那么如果 NSInteger 持有 40 亿,它在 64 位上工作,在 32 位上溢出?
    • 是的,你可以在NSObjCRuntime.h头文件中看到。
    • 这很糟糕不是吗?我看不出使用 NSInteger 的意义。
    • 它允许你的代码是面向未来的,为什么在 64 位系统上使用 32 位 int。但是,如果您事先知道需要存储大量数字,则应该使用可以容纳它的类型。
    • 是的。那就是我的意思。我们应该总是事先知道我们要使用的数字的范围。
    猜你喜欢
    • 1970-01-01
    • 2020-03-09
    • 2011-08-28
    • 2020-07-15
    • 2017-05-07
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2014-06-19
    相关资源
    最近更新 更多