在Objective-C中,何时可以使用基本数据类型而不是NSNumber?

在Objective-C中,何时可以使用基本数据类型而不是NSNumber?,objective-c,Objective C,我最近正在用Objective-C编写一个程序,我试着写了一行的以下部分,其中“someString”是NSString的一个实例: [someString substringFromIndex:3]; 编译器似乎对此没有问题,但我不太清楚原因。substringfromfromindex方法的文档说明参数必须是nsuiger但是,3不只是一个原始整数吗?为什么我可以这样做?(注意,我是Objective-C新手,因此我确信推理非常简单,或者我只是在某些方面错了。)NSUInteger被类型定

我最近正在用Objective-C编写一个程序,我试着写了一行的以下部分,其中“someString”是NSString的一个实例:

[someString substringFromIndex:3];

编译器似乎对此没有问题,但我不太清楚原因。
substringfromfromindex
方法的文档说明参数必须是
nsuiger
但是,3不只是一个原始整数吗?为什么我可以这样做?(注意,我是Objective-C新手,因此我确信推理非常简单,或者我只是在某些方面错了。)

NSUInteger
被类型定义为基本类型。它是哪种类型取决于您编译的处理器

如图所示(并粘贴在下面):


NSNumber
nsinteger
是两种不同的类型。正如卡朱卢克所指出的,
NSUInteger
(如
NSInteger
)是标准C基元类型上的一个typedef,但
NSNumber
是一个对象类
NSNumber
NSInteger
/
NSInteger
不可互换,但
NSInteger
/
NSInteger
通常可与常规C int/long互换

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 
    typedef unsigned long NSUInteger;
#else 
    typedef unsigned int NSUInteger;
#endif