美文网首页iOS开发
iOS中声明常量常用的几种做法FOUNDATION_EXPORT

iOS中声明常量常用的几种做法FOUNDATION_EXPORT

作者: 我的发 | 来源:发表于2019-01-10 22:25 被阅读15次

    首次看这3种大概的意思

    FOUNDATION_EXPORT是Fundation框架里面的宏 c/c++中不能使用
    
    extern是c/c++的关键字,oc/c/c++通用
    
    #define是oc/c/c++通用宏定义关键字
    

    再看看他们的用法

    .h

    image.png
    .m
    image.png

    demo 地址: https://github.com/sushushu/FOUNDATION_EXPORT-extern-define

    比较结果

    image.png

    ida反编译下的差异

    image.png

    那么在项目里面应该怎么使用这3种来声明常量?

    • 三者的区别已经简单解释过了,前2种可以说没什么区别,说下第3种吧。
    • 比较字符串是否相同除了用运算符 == 还可以用 isEqualToString: ,前2种用运算符 ==isEqualToString:都没问题,值得注意的是用#define 定义的字符串用运算符 == 比较的话会提示警告Direct comparison of a string literal has undefined behavior(但是也能正常编译)。
    • 个人比较推荐使用FOUNDATION_EXPORT来声明,最好是随官方做法,以防官方有什么变动。MJExtension也把extern替换成了FOUNDATION_EXPORT(https://github.com/CoderMJLee/MJExtension/commit/9c4f7f2d95158368532952890c405936a69171f7)
    • 如果为了省事直接用#define也是可以的(例如:#define ScreenWidth [UIScreen mainScreen].bounds.size.width) 但是要注意#define只是内容拷贝。写了个demo来测试,有兴趣可以去下载.

    相关文章

      网友评论

        本文标题:iOS中声明常量常用的几种做法FOUNDATION_EXPORT

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