所以,我试图弄清楚我应该关心NSInteger与int的关系。我没有CS学位,所以很多这些类型转换论证都很难说。我可以说,最好的论点是"在iOS中使用NSInteger而不是int,这样最终如果/当64位iOS出现时,你的变量仍然是存储指针的正确大小。"很公平。除了我在我的整体中存储指针大概永远不会。
假设我有一个int存储了一个魔方bean的数量,而另一个int存储了皮肤猫的方法,我在函数之间传递它们并将它们写入Core Data等等,然后Apple发布64位iOS - 有什么变化?我为什么关心?
另外,如果我关心,为什么不使用int32_t而不是NSInteger?似乎 将是保持可预测性的方式。
答案 0 :(得分:5)
关于使用C99的<stdint.h>
标题中的类型的观点绝对有效:这些类型使您可以更好地控制整数类型的大小。然而,NS
- 前缀整数类型早于<stdint.h>
的标准化,因此引入了一组并行的抽象。
我在与Cocoa方法交互时使用NS
- 前缀整数类型。例如,如果Cocoa方法返回NSUinteger
,我也会使用NSUinteger
类型声明我的变量。
当我需要精确控制存储数据的大小时,我在程序中使用<stdint.h>
类型的变量。最终在核心数据中的项目属于此类别。
当整数类型的大小无关紧要时,例如,当我需要for
循环中的循环控制变量时,我使用int
。
答案 1 :(得分:2)
我的建议:
编写Obj-C代码时,请使用NSInteger
。然后它符合您使用的框架。它可能会从int
更改为其他内容(int64_t
,long
,?)。
如果编写C / C ++代码(可移植性)显然不使用NSInteger
。
如果您认为您的变量将超过INT_MAX
(常量检查here),您可以使用int64_t
(当您希望拥有32/64位灵活代码时)或{{ 1}}(如果你不在应用程序的32/64位版本之间共享内存对象)。如果您确定在您的变量中没有负值,请考虑使用无符号类型(long
uint
)。
内部:对于指针,请勿使用uint64_t
。使用int