【问题标题】:is NSInteger a 32bit integerNSInteger 是 32 位整数吗
【发布时间】:2012-08-09 03:11:55
【问题描述】:

我认为在 ios 环境中声明 NSInteger 意味着它永远只是一个 32 位值,我是否正确?

我想知道,另一个不熟悉目标 c 的程序员告诉我使用 int32,我在目标 C 中可以找到的唯一类似的东西是 int32_t,_t 代表“整数类型”.. 但是使用这些类型变得非常痛苦,我觉得我没有像 NSInteger 那样从objective c 提供的所有功能控制。

任何帮助将不胜感激。

【问题讨论】:

  • 您在 Objective-C 中使用 NSInteger 获得了什么样的控制?
  • 我猜不是太多的控制,而是易于使用,例如转换字符串或其他数据类型似乎比其他原始 int 类型(如 int32_t)更容易。即 NSInteger myInt = [myString intValue ]; 希望这是有道理的...我还发现所有 ARM 处理器都是 32 位的。我进行了外部搜索,因为文档没有真正指定。
  • 字长在你的应用程序中重要吗?我认为您最好使用 Cocoa 返回的定义和类型。我不确定你的开发同事为什么要提倡别的东西?
  • 我猜大小并不重要,他只是想让我确保我将返回的数据放入正确的值类型中。所以如果它是一个字符串到一个 NSString 一个 Bool a bool 但是当涉及到 Integer 值时,他建议使用 32 位 int.. 而我唯一能找到的是 int32_t... 但我认为这是一个 c 值.. 所以我在想我可以使用 NSInteger 吗?没关系,这就是我问这个问题的原因......我想我只是有点紧张,我希望这是正确的,所以在我承诺任何事情之前我会检查事情
  • 大声笑,好吧...您的“易用性”方法不正确。对于 NSInteger,您应该使用 integerValue,而不是 intValue(它返回...一个 int)。

标签: iphone ios nsinteger int32


【解决方案1】:

以下是旧版 SDK 中“NSObjCRuntime.h”中“NSInteger”的定义方式:

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

截至 2013 年 9 月,iPhone 现在可以运行 64 位芯片,这意味着 NSInteger 可能要大得多。

在我自己的编码中,如果我正在编写纯 Objective C,我会坚持使用NSInteger,因为这可以为我的代码提供面向未来的证明。另一方面,开源的东西和某些程序员喜欢使用“uint32_t”或“int32_t”和其他类似的显式类型,所以当我看到这些时,我会尝试在代码中匹配他们的风格我这样做对它有用。

【讨论】:

  • 谢谢你,你的最后一句话正是我面临的困境。我现在全职用Objective C开发了6个月左右,我正在做的项目是一个应用程序的端口由一位真正有成就的开发人员(我的老板)制作,他使用 delphi 和其他语言工作。所以我经常对我使用的变量类型感到困惑,因为他以前从未见过它们,当我被要求解释我为什么选择时,我会非常紧张,所以现在我非常努力地完全理解我的决定。我想因为我没有经验,我不得不问这些小问题。
  • 我不认为这是一个小问题。如果对方坚持“int32_t”,尽其所能让他开心(尤其是如果是你的老板)。
  • 干杯,是的,我可能会在早上和他聊聊我在这里的发现(你们帮助我的发现),看看他说了什么。但如果它是一个本地替代品,那几乎是与他最初的建议相同,我想他会认为这没关系...再次感谢。
  • 期待意外。 Apple 刚刚宣布了用于新 iPhone 5s 的 64 位架构的 A7 芯片 ;-)
【解决方案2】:

typedef 的存在是为了保护您免受基本类型的影响,这就是为什么您使用它们而不是原始类型(它称为可移植性)。

【讨论】:

    【解决方案3】:

    更新 iOS 11:NSInteger 可以是 32 位或 64 位,具体取决于构建的应用程序和 iOS 版本。

    在构建 32 位应用程序时,NSInteger 是一个 32 位整数。一种 64 位应用程序将 NSInteger 视为 64 位整数。

    https://developer.apple.com/documentation/objectivec/nsinteger

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-18
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 2018-05-15
      • 2017-11-18
      • 1970-01-01
      相关资源
      最近更新 更多