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

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

作者: Even会编程 | 来源:发表于2016-05-06 17:32 被阅读77次

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/wuejrttx.html