首先来看一下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
问题如下;
1.LP64架构的平台下long毫无疑问是64位的,TARGET_OS_WIN32下long应该是32位的,NS_BUILD_32_LIKE_64是什么意思呢?TARGET_OS_WIN32下int也是32位的,为什么这时候要用long?
2.(TARGET_OS_EMBEDDED && !(TARGET_OS_IPHONE)我理解的意思是如果目标平台是非ios的嵌入式平台,那么NSInteger用long,这样理解是否正确?为什么呢?
3.我把目标平台设置为4s的话,NSInteger是int;我把目标平台设置为6s的话NSInteger是long,我的理解是因为6s是使用LP64架构的,这种理解是否正确呢?
4.我个人认为不应该推荐使用NSInteger,因为如果我使用了NSInteger,赋了一个 >4位的值,那么我把目标平台设为4s的时候,这时候肯定会出问题。但是苹果官方是推荐使用NSInteger的,为什么呢?
PS:初学OC,望大神赐教~~
4、苹果6以上是64位系统,为了一份代码支持32和64,so...
3、对的。
2、对的。
1、TARGET_OS_WIN32意思Generated code will run under 32-bit Windows
OS系统是64位的。