美文网首页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