我最近在Objective-C中编写了一个程序,我尝试编写了以下部分的行,其中'someString'是NSString的一个实例:
[someString substringFromIndex:3];
编译器看起来没问题,但我不确定为什么。 substringFromIndex
方法的文档说参数必须是NSUInteger
但是,3不是一个原始整数吗?我为什么要这样做? (注意,我是Objective-C的新手,所以我确信推理非常简单,或者我对某些事情的看法不对。)
答案 0 :(得分:9)
NSUInteger
是基本类型的typedef。它的类型取决于您正在编译的处理器。
如here所示(并粘贴在下方):
#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
答案 1 :(得分:4)
NSNumber
和NSUInteger
是两种不同的类型。正如CajunLuke所指出的,NSUInteger
(如NSInteger
)是标准C基元类型的typedef,但NSNumber
是一个对象类。 NSNumber
和NSInteger
/ NSUInteger
不可互换,但NSInteger
/ NSUInteger
通常可与常规C int / long互换。