好可怕,到底有多少知识点是我们想当然的!

在此之前我始终认为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”

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容