在Cocoa和CocoaTouch中使用int是错误的吗?

时间:2009-12-01 01:33:48

标签: objective-c cocoa cocoa-touch

在代码中使用NSInteger代替int之类的内容有什么好处?我在示例中看到了很多,包括Apple的官方代码示例。

3 个答案:

答案 0 :(得分:3)

我很确定NSIntegerNSUInteger是为了解决Mac OS上的64位量化问题而发明的(无论你正在构建什么样的架构,它们都保证是正确的尺寸) 。我觉得你在iPhone上使用它并不重要,尽管我习惯使用Apple的NS类型。

无论如何,如果您将代码移植到Mac OS,它会更容易。

答案 1 :(得分:3)

在SO.com上有一个类似的问题:In Cocoa do you prefer NSInteger or int, and why?我更喜欢使用NSInteger,因为它是面向未来的,Apple现在使用它int,这是推荐的做法的东西。

但使用int并非“错误”。

答案 2 :(得分:2)

  • 在32位代码(包括iPhone)中:int为4个字节,long为4个字节,指针为4个字节
  • 在64位代码中:int是4个字节,long是8个字节,指针是8个字节

许多现有API(由于历史原因而错误地)在32位模式下使用int但必须在64位模式下使用long

在C中,intlong不是等效类型,因此如果您使用int,则可能与64位API不兼容,并且如果您使用long您可能与32位API不兼容。通过使用NSInteger,您的代码将与这些API的32位和64位版本兼容。

因此,如果您使用的是指定NSInteger的API,那么您应该使用NSInteger。

在您自己的代码和您自己的API中:

  • 如果您需要4字节整数,请使用int
  • 如果您需要指针大小的整数,请使用longNSInteger
  • 如果您需要8字节整数,请使用long long

你不一定使用NSInteger的原因是8字节整数有很多用途。