7

所以,我试图弄清楚我应该关心多少 NSInteger 与 int。我没有计算机科学学位,所以很多类型转换参数都非常晦涩难懂。据我所知,这个论点是“在 iOS 中使用 NSInteger 而不是 int,以便最终如果/当 64 位 iOS 出现时,您的变量仍然是存储指针的正确大小。” 很公平。除了我几乎从不将指针存储在我的整数中。

假设我有一个 int 存储欠 Jack 的魔法豆数量,另一个 int 存储给猫剥皮的方法数量,我在函数之间传递它们并将它们写入 Core Data 等,然后 Apple 发布 64 -bit iOS——有什么变化?我为什么在乎?

另外,如果我在乎,为什么不是使用 int32_t 而不是 NSInteger 的论点?似乎将是保持事情可预测的方式。

4

2 回答 2

5

您关于使用<stdint.h>C99 标头中的类型的观点是绝对有效的:这些类型使您可以更好地控制整数类型的大小。然而NS,以 - 为前缀的整数类型早于 的标准化<stdint.h>,因此引入了一组并行的抽象。

在与 Cocoa 方法交互时,我使用NS-prefixed 整数类型。例如,如果 Cocoa 方法返回,我也使用类型NSUinteger声明我的变量。NSUinteger

<stdint.h>当我需要精确控制存储数据的大小时,我会在程序中使用变量类型。最终出现在 Core Data 中的项目属于此类别。

当整数类型的大小无关紧要时,例如,当我需要循环中的循环控制变量时for,我使用int.

于 2013-05-28T20:00:32.913 回答
2

我的建议:

  • 编写 Obj-C 代码时,使用NSInteger. 然后它符合您使用的框架。它可能会从一次更改int为其他内容(int64_t, long, ?)。

  • 如果编写 C/C++ 代码(可移植性)显然不要使用NSInteger.

如果您认为您的变量将超过INT_MAX(一个 const. check here),您可能会使用int64_t(当您希望拥有 32/64 位灵活代码时)或long(如果您不在应用程序的 32/64 位版本之间共享内存对象) . uint uint64_t当您确定 var 中没有负值时,还可以考虑使用无符号类型 ( )。

内部:对于指针,不要使用int. 利用void *

于 2013-05-28T19:49:49.957 回答