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

时间:2012-02-05 05:01:04

标签: objective-c

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

[someString substringFromIndex:3];

编译器看起来没问题,但我不确定为什么。 substringFromIndex方法的文档说参数必须是NSUInteger但是,3不是一个原始整数吗?我为什么要这样做? (注意,我是Objective-C的新手,所以我确信推理非常简单,或者我对某些事情的看法不对。)

2 个答案:

答案 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)

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