objective-c - NSUInteger 相当于普通的旧 int 吗?

标签 objective-c

我只是在学习。在本教程中,他们声明了一个需要 NSUInteger 的 block 。参数,然后它们只需传入 64 。 。 。我的印象就是这些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/

相关文章:

ios - 是否可以在不搜索 select/create 的情况下识别 sqlite3_step 执行的查询类型(select、create 等)?

Objective-C:访问另一个类的属性

objective-c - 在 Mac 上直接录制屏幕

ios - 继承自 MyClass : UIViewController causes error 'Cannot find interface declaration'

objective-c - 将 objective-c block 转换为 Swift 闭包

ios - dataWithContentsOfURL 需要很长时间才能在 url 中返回大量单词

objective-c - 如何更改 NavigationController 的 rootviewcontroller?

objective-c - 将字典项从 plist 转换为 NSArray

iphone - 适合初学者的自动释放

ios - getter 和 setter 不工作 objective-c