在此之前我始终认为OC中的NSInteger是iOS开发语言为了方便开发中统一使用的数据对象,也就是说NSInteger是“对象”。
但是我在偶然的一个机会看到别人对于NSInteger的讨论,开始怀疑起自己的认知,难道这个家伙不是对象,那是什么东东呢?好吧,来看看
__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
这是NSInteger的设备的位数(64位or32位)来定义是int类型还是long类型,从而保证NSInteger永远都是4个字节,也就是说这个NSInteger是int或者long类型的别名,仅此而已!我勒个去,我误会了这么久,怪不得之前转换的时候会出现一些莫名其妙的问题呢!因为32位的int类型是2字节的,32位设备下的NSInteger是4个字节,这个NSInteger转int类型的时候就可能会丢失数据,造成错误。
我只是点进去看了一下NSInteger的宏定义,就发现了这么一个我一直想当然的错误,看来以后凡事还是眼见为实,不能想当然,深入理解了,亲自测试了,反复印证了才能确定一些东西,抛出这么一段学习时的小插曲,大家共勉!
我继续学习了!
转载时请注明“来自简书-EvenZhu”
网友评论