2011-10-02 210 views
36

Objective-C中int,NSIntegerNSUInteger之间的主要区别是什么?int,NSInteger和NSUInteger之间的区别

哪一个更适合在应用程序中使用?为什么?

+0

没有'NSInt'这样的东西。 – BoltClock

+0

NSInteger非NSInt .. – Hitarth

+2

[请参阅文档](http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html) – Jiri

回答

29

在这种情况下,您可能右键单击并转到定义:

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 
typedef long NSInteger; 
typedef unsigned long NSUInteger; 
#else 
typedef int NSInteger; 
typedef unsigned int NSUInteger; 
#endif 
+0

ok thanx i得到它 – Hitarth

+0

容易和正确 –

20

的区别是抽象类型及其同伙从硬件大小。现在我们不必担心整数是多少,或者指针在特定硬件上有多大。

“C”在这方面不好,只能说明一个long至少和int一样大,int是硬件的“自然”整数大小(不管是什么意思),int是至少只要短 - 一个(大混乱)。

这似乎是来自Fortran的一个好主意,但并没有很好的老化。

可以使用POSIX定义的东西,比如uint32_t,int16_t等。但是这并不能解决指针在任何特定硬件上需要多大。

因此,如果Apple将返回类型定义为NSUInteger,那么您只需使用该类型,并且不需要知道它是否为特定硬件的大小为16,32或64位。 (我只是为了举例而选择了这些数值)。

正如你在@Bastian中看到的那样,实际尺寸取决于硬件。

该文档回答“问题的信”,但没有提供“为什么”的理解?

+0

你正确的。我们只得到他们之间的差异,但为什么?我仍然没有得到请建议我 – Hitarth

+3

这是API标准化。这些框架在多种体系结构上发布 - 它们都是相同的API。通过使用这些类型定义,Apple正在将平台差异从API消费者中抽象出来。如果你只是用这些类型的API来说话,那么(在理论上)你不需要在为i386,x86_64,ppc,arm7等编译相同的代码时考虑平台差异。这是一个抽象。有人说,你应该使用最高级别的抽象来完成工作。所以除非你有理由不使用这些类型,否则我会说使用它们。 – ipmcc

相关问题