是NSInteger一个32位整数

问题描述:

我正确地认为在ios环境中声明NSInteger意味着它只会是一个32位值?是NSInteger一个32位整数

我想知道,另一位不熟悉ObjectiveC的程序员使用int32的时候,唯一类似的东西是我在目标C中可以找到的int32_t,_t代表'integer type'。但与这些类型的工作正在成为一个真正的痛苦,我觉得我没有像NSInteger似乎从目标c提供的所有控制功能。

任何帮助将不胜感激。

+0

你跟NSInteger的Objective-C中得到什么样的控制? – xyzzycoder 2012-08-09 03:18:53

+0

我想没有那么多的控制,但易用性,例如将字符串或其他数据类型似乎公平位更容易,其他原始INT类型,如int32_t ..即** NSInteger的敏= [myString的的intValue]; **希望是有道理...我也发现所有的ARM处理器都是32位的..我做了外部搜索,因为这些文档没有真正指定。 – HurkNburkS 2012-08-09 03:21:14

+0

在您的应用程序中的字大小是否重要?我认为你最好使用Cocoa返回的定义和类型。我不确定你的开发者同事为什么要提倡其他的东西? – xyzzycoder 2012-08-09 03:22:59

这里是如何“NSInteger”在“NSObjCRuntime.h”在旧的SDK的定义:

#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”和其他显式类型,所以当我看到这些时,我尝试在我正在执行的代码中匹配它们的样式用它。

+0

谢谢,你的最后一句话恰恰是我面对的困境。我现在只用6个月左右的目标C全职开发,我正在开发的项目是一个真正有成就的开发人员制作的应用程序的端口(我的老板)他与德尔福和其他语言合作。所以经常会对我使用的变量类型感到困惑,因为他以前从未见过它们,当我被要求解释为什么选择这种变量时,我非常紧张,现在我非常努力地完成对我的决定的理解。我猜是因为我经验不足,不得不提出这样的小问题。 – HurkNburkS 2012-08-09 03:34:35

+0

我不认为这是一个小问题。如果其他人坚持使用“'int32_t'”,那就让他开心(尤其是如果这是你的老板)。 – 2012-08-09 03:35:49

+0

欢呼声,是的,我可能会在早上和他聊天,谈谈我在这里的发现(你们帮助我的发现),看看他说了什么。但是如果它的原生选择与他原来的建议几乎相同,喜欢认为他会认为那样好...再次感谢。 – HurkNburkS 2012-08-09 03:59:14

根据C标准,int32_t是一个32位宽的整数类型。

NSInteger是一种整数类型,其宽度定义为目标平台上机器字的宽度,实际上它可以是32位或64位。在iOS上,它始终是32位。

因此,实际上,两者在字面上可以互换,直到您听到64位iOS。

+0

好吧,这是类似于我的调查提出,但不是简洁..我担心的64位iPhone ... – HurkNburkS 2012-08-09 03:28:41

的类型定义存在从基本类型,保护你,这就是为什么你用它们来代替原始的类型其所谓的便携性。

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

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

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