我在 .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/