可能的重复:
When to use NSInteger vs int?
Why is there is an NSInteger?
我们可以用intNSInteger来交换吗?是否有任何特定情况下只使用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类型,例如NSIntegerint
如果您确实关心类型的宽度,请使用c99long类型,例如stdint.hint32_t
如果您需要一个保证足够大的int来容纳指针,请使用int64_tintptr_t

关于objective-c - int和NSInteger有什么区别? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6056754/

10-13 06:22