iOS开发int和NSInteger的区别

总会遇到用int还是用NSInteger,而且总是忘了为什么。今天索性查完资料记下来。在苹果的源文件中,NSInteger是这样定义的:

1
2
3
4
5
6
7
#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

这个宏定义是什么意思呢?

  • __LP64__表示指针长度为64位
  • (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE)嵌入式环境并且不是iPhone
  • TARGET_OS_WIN3232位Windows环境
  • NS_BUILD_32_LIKE_64以64位编译

概括起来就是,苹果会选择较大的那种类型作为NSInteger,在32位环境上就是int,在64位环境上就是long。

© 2021 cyruschang All Rights Reserved.
Theme by hiero