当开发iOS时,我应该使用NSInteger vs. int ?我在苹果的示例代码中看到,他们在将值作为参数传递给函数或从函数返回值时使用NSInteger(或NSUInteger)。
- (NSInteger)someFunc;...
- (void)someFuncWithInt:(NSInteger)value;...
但在函数中,他们只是用int来跟踪一个值
for (int i; i < something; i++)
...
int something;
something += somethingElseThatsAnInt;
...
我读过(被告知),NSInteger是一个安全的方法来引用一个整数在64位或32位的环境,所以为什么要使用int在所有?
在iOS上,使用int还是NSInteger并不重要。如果iOS转向64位,这将变得更加重要。
简单地说,NSIntegers在32位代码中是整型(因此是32位长型),在64位代码中是长型(64位代码中的长型是64位宽的,但在32位代码中是32位宽的)。使用NSInteger而不是long的最可能的原因是不破坏现有的32位代码(使用int)。
CGFloat也有同样的问题:在32位(至少在OS X上)上,它是float;在64位上,它是双精度的。
更新:随着iPhone 5s、iPad Air、iPad Mini和iOS 7的推出,你现在可以在iOS上构建64位代码了。
更新2:另外,使用NSIntegers有助于Swift代码的互操作性。
在iOS上,使用int还是NSInteger并不重要。如果iOS转向64位,这将变得更加重要。
简单地说,NSIntegers在32位代码中是整型(因此是32位长型),在64位代码中是长型(64位代码中的长型是64位宽的,但在32位代码中是32位宽的)。使用NSInteger而不是long的最可能的原因是不破坏现有的32位代码(使用int)。
CGFloat也有同样的问题:在32位(至少在OS X上)上,它是float;在64位上,它是双精度的。
更新:随着iPhone 5s、iPad Air、iPad Mini和iOS 7的推出,你现在可以在iOS上构建64位代码了。
更新2:另外,使用NSIntegers有助于Swift代码的互操作性。