ObjectiveC中针对'的类似方法;java.lang.Class.getDeclaredField()';
我正在读一个文本文件。我想检查类中是否声明了一个与我从文件中读取的文本名称相同的变量 java中的方法是“java.lang.Class.getDeclaredField()”。有关详细信息,请参阅ObjectiveC中针对'的类似方法;java.lang.Class.getDeclaredField()';,java,objective-c,function,variables,methods,Java,Objective C,Function,Variables,Methods,我正在读一个文本文件。我想检查类中是否声明了一个与我从文件中读取的文本名称相同的变量 java中的方法是“java.lang.Class.getDeclaredField()”。有关详细信息,请参阅 我在Objective中找不到类似的方法。有吗?如果没有,我如何实现相同的功能。如果你有什么想法,请给我一些提示。有响应选择器和一致性协议方法,也许它们可以帮助你检查属性/ 编辑:/IVAR/ -(NSMutableArray*)getAllPropertyOfClass:(类)aClass{ NS
我在Objective中找不到类似的方法。有吗?如果没有,我如何实现相同的功能。如果你有什么想法,请给我一些提示。有
响应选择器和一致性协议方法,也许它们可以帮助你检查属性/
编辑:/IVAR/
-(NSMutableArray*)getAllPropertyOfClass:(类)aClass{
NSMUTABLEARRY*mArray=[NSMUTABLEARRY new];
无符号整数超过;
Ivar*ivars=class_copyIvarList([aClass class],&outCount);//class_copyPropertyList([aClass class],&outCount);
for(无符号整数i=0;i
。看看第一个answer@afsal:你确定你需要ivar,并且像@property/@synthetic这样的人没有属性吗?@AnoopVaidya是的。我敢肯定。例如长Id;NSString*名字@阿法索米·拉库蒂:看我的答案对两者都有好处。IVAR和属性与动态内省/反思无关。Java中的一个字段类似于iVar,而不是协议。Close,但同样地,它不能很好地替代实际的内省/反射,并且不能解释iVar。与此相比,我更喜欢dupe中列出的运行时方法。我认为obj运行时的成本会更高。如果您的方法检查类是否实现了samllArray
方法,如果有一个名为samllArray
的实例变量,那么它就不是了。运行时的速度与找到这个问题的全面答案有什么关系?我希望有一个指向该问题的链接,以了解您讨论的上下文。
YourClass *arrObj=[YourClass new];//your target class where you wnat to check
NSString *propertyName=@"samllArray";//this is what you will check in class YourClass
if([arrObj respondsToSelector:NSSelectorFromString(propertyName)]){
NSLog(@"yes, exists");
}
else{
NSLog(@"no, it does not exists");
}
- (NSMutableArray *)getAllPropertyOfClass:(Class)aClass {
NSMutableArray *mArray=[NSMutableArray new];
unsigned int outCount;
Ivar *ivars = class_copyIvarList([aClass class], &outCount); //class_copyPropertyList([aClass class], &outCount);
for(unsigned int i = 0; i < outCount; i++) {
Ivar ivar = ivars[i];
const char *propName = ivar_getName(ivar);
if(propName) {
NSString *propertyName = [NSString stringWithUTF8String:propName];
mArray[mArray.count]=propertyName;
}
}
free(ivars);
return mArray;
}