What does OBJC_EXPORT keyword in Objective-C mean?
当我使用这个方法
1 | **OBJC_EXPORT** const char *class_getName(Class cls) |
如果你 CMD 点击符号,你会看到它不是关键字。
1 | #define OBJC_EXPORT OBJC_EXTERN OBJC_VISIBLE |
而
而
基本上是说您可以在外部链接该符号。
这里是完整列表:
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 TARGET_OS_WIN32 # if defined(BUILDING_OBJC) # define OBJC_VISIBLE __declspec(dllexport) # else # define OBJC_VISIBLE __declspec(dllimport) # endif # else # define OBJC_VISIBLE __attribute__((visibility("default"))) # endif #endif #if !defined(OBJC_EXPORT) # define OBJC_EXPORT OBJC_EXTERN OBJC_VISIBLE #endif |
如果您有三个分别名为
使用 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 NSString* commonString = @"OldValue"; // ClassB.m #import"ClassA.h" ... commonString = @"NewValue"; // Can be inside a function or method |
参考:this so post