关于ios:Objective-C中的OBJC_EXPORT关键字是什么意思? | 珊瑚贝

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 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


如果您有三个分别名为 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
NSString* commonString = @”OldValue”;

// ClassB.m
#import”ClassA.h”

commonString = @”NewValue”; // Can be inside a function or method

参考:this so post


来源:https://www.codenong.com/40035885/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_8866.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?