What does OBJC_EXPORT keyword in Objective-C mean?
当我使用这个方法class_getName()时,我发现它是这样声明的:
1
|
**OBJC_EXPORT** const char *class_getName(Class cls)
|
OBJC_EXPORT 是什么意思?
如果你 CMD 点击符号,你会看到它不是关键字。 OBJC_EXPORT 定义为:
1
|
#define OBJC_EXPORT OBJC_EXTERN OBJC_VISIBLE
|
而 OBJC_EXTERN 是 extern”C” 或 extern,这取决于你是分别编译 C 还是 C。
而 OBJC_VISIBLE 在 Windows 上是 __declspec(dllexport) 或 __declspec(dllimport),否则为 __attribute__((visibility(“default”))。
基本上是说您可以在外部链接该符号。
这里是完整列表:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#if !defined(OBJC_EXTERN)
# if defined(__cplusplus) # define OBJC_EXTERN extern”C” # else # define OBJC_EXTERN extern # endif #endif #if !defined(OBJC_VISIBLE) #if !defined(OBJC_EXPORT) |
如果您有三个分别名为 A,B and C 的类并且所有三个类都不相关(我的意思是不在继承层次结构中)并且您只想访问在 A 中声明的值,那么 extern 是一种更合适的方法。在这种情况下,您想在 ClassA.h 中将变量声明为 extern,然后在 Class.m 中定义它。只要 ClassB 和 ClassC 导入 ClassA.h,它们就能够链接到相同的 extern 定义。
使用 OBJC_EXPORT 比单独使用 extern 更健壮,它在 objc-api.h 中定义,并且也处理 C 下的编译。这是一个代码示例:
1
2 3 4 5 6 7 8 9 10 11 |
// ClassA.h
OBJC_EXPORT NSString* commonString; … // ClassA.m // ClassB.m |
参考:this so post
来源:https://www.codenong.com/40035885/