我只是在学习。在本教程中,他们声明了一个带有NSUInteger
个参数的块,然后他们只是传入6
和4
。 。 。我的印象是所有这些NS
事物都是对象包装器,与内置的c-types不同。
既然我正在写这篇文章,我记得他们之前说过我们不需要*
NSUInteger
声明中的NS
因为不像其他 NSUInteger
个对象。
但...... {{1}}显然不是c型。那么......这里发生了什么?
答案 0 :(得分:2)
简答:有时,NSUInteger是“unsigned int”。但有时它不是。这取决于您编译代码的平台。
长答案:
NSUInteger或NSInteger在NSObjCRuntime.h中定义,您可以在NSUInteger上单击Command并单击以下定义:
#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是无符号long的别名,而在32位环境中,它是一个int。
由于新的iPhone 5s运行在64位CPU上,因此建议使用NSUInteger或NSInteger代替普通的unsign int或int。
最后,NSUInteger确实是一个真正的c-type,在另一个名字中,所以编译器可以做一些工作让你更好地处理它。
答案 1 :(得分:1)
答案 2 :(得分:1)
如果在XCode中,您在NSInteger上选项 - 单击,您将转到定义:
#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位系统,它被定义为 long ,而不是 int 。