可能的重复:
When to use NSInteger vs int?
Why is there is an NSInteger?
我们可以用int
和NSInteger
来交换吗?是否有任何特定情况下只使用NSInteger
而不使用int
?
最佳答案
我们可以用int和nsinteger来交换吗?
没有。在苹果使用的lp64架构上,对于现代的os x cocoa,nsinteger是64位宽的。这意味着,如果向int强制转换一个int值,则比较失败可能会失败。下面是一个例子:
NSRange theRange = [@"foo" rangeOfString @"x"];
int location = theRange.location;
if (location == NSNotFound) // comparison is broken due to truncation in line above
{
// x not in foo
}
在我看来,您只应该使用
NSInteger
您需要将参数传递给COCOA或接收COCOA的结果,并且文档表示数据类型是“cc>”。在所有其他情况下:如果不关心字体的宽度,请使用c类型,例如
NSInteger
或int
。如果您确实关心类型的宽度,请使用c99
long
类型,例如stdint.h
,int32_t
。如果您需要一个保证足够大的int来容纳指针,请使用
int64_t
或intptr_t
关于objective-c - int和NSInteger有什么区别? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6056754/