我只是在学习。在本教程中,他们声明了一个需要 NSUInteger
的 block 。参数,然后它们只需传入 6
和4
。 。 。我的印象就是这些NS
事物是对象包装器,与内置的 c 类型不同。
现在我正在写这篇文章,我记得他们之前说过我们不需要 *
在NSUInteger
声明,因为它与其他 NS
不同。对象。
但是...一个NSUInteger
显然不是c型。那么……这是怎么回事?
最佳答案
简短回答:有时,NSUInteger 是“unsigned int”。但有时并非如此。这取决于您编译代码的平台。
长答案:
NSUInteger 或 NSInteger 在 NSObjCRuntime.h 中定义,您可以 Command+单击 NSUInteger 并查看下面的定义:
#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
所以,一般来说,这意味着在64位环境下,NSUInteger是unsigned long的别名,而在32位环境下,它是一个int。
由于新的 iPhone 5s 运行在 64 位 CPU 上,因此建议使用 NSUInteger 或 NSInteger 来代替普通的 unsign int 或 int。
最后,NSUInteger 确实是一个真正的 c 类型,但有另一个名称,因此编译器可以为您做一些工作来更好地处理它。
关于objective-c - NSUInteger 相当于普通的旧 int 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22189026/