objective-c - C 类型变量的 Objective C 反射

标签 objective-c c reflection

我在 .h 文件的 @interface block 中声明了几个 extern 变量。它们在 .m 文件中分配。在我的 @interface 的一种方法(首选类方法)中,我想通过反射枚举这些变量,但我不知道这是否可能,yes 又如何? 我的代码示例:

Consts.h

extern NSString *MyConst1;
extern NSString *MyConst2;

Consts.m

NSString *MyConst1 = nil;
NSString *MyConst2 = nil;

+ (void)load {
  MyConst1 = ...;
  MyConst2 = ...;
}

+ (void)someMethod {
  // i could use class_copyIvarList for objective c properties/ivars, 
  // but is it possible to get that MyConts1 and MyConst2 via reflection ? 
  // I understand, that C have different namespace,
  // and I have no experience with it. 
}

最佳答案

Objective-C 支持 Objective-C 对象的反射。反射之所以有效,是因为每个 Obj-C 类都包含必要的元数据(属性名称、方法名称等)。

Objective-C 不会以任何方式改变 C 语言。 Objective-C运行时基本上是用C实现的,编译器只是将Objective-C翻译成C函数调用。

不可以,您不能在任何 Objective-C 类的上下文之外对全局变量使用反射。

如果你想要反射,请将它们包装到一个类中。

但是请注意,使用反射几乎从来都不是一个好的解决方案。通常它被滥用来解决由糟糕的架构引起的问题。

关于objective-c - C 类型变量的 Objective C 反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41932644/

相关文章:

ios - NSExtensionActivationRule & iOS 应用扩展 : how to activate the extension in iTunes

iphone - 减少 iPhone 应用程序启动时间

c - 尝试使用 C 来理解 USB

c - C声明语法

c - 在C中逐行读取文件,realloc后concat不起作用

scala - 使用类型参数进行类型转换

ios - 阻塞当前线程,直到部分代码在 iOS 的主线程上运行

iOS:自动布局导致图像框架变小?

c# - 当我们可以用纯反射做同样的事情时为什么要使用 PrivateObject

c# - 将 PropertyInfo.PropertyType 转换为枚举