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