2014-02-23 16 views
0

我有以下方法。@encode for type id其中id实际上是任何对象

- (void)someObject:(id)obj { 
    char* encoding = @encoding(typeof(obj)); 
    NSString *s = [NSString stringWithCString:encoding encoding:NSUTF8StringEncoding]; 
    NSLog(s); 
} 

这个方法总是返回@"@"我是否通过NSNumber, NSArray, NSDictionary or NSString类型的变量中的obj。我假设它正在检查obj指针类型。

我必须这样做才能返回已传递的变量的实际类型编码?

+1

“变量的类型编码”是什么意思?你在期待什么? – Merlevede

+0

问题是,解引用一个'id'不透明类型是不合理的(所以@encode响应是正确的,因为'id'是一个对象,意思是'@')......出于好奇,你是什么试图完成这个? – HepaKKes

+0

@HepaKKes:我试图从字典中将这些值赋给一个类的ivars。我有一个Ivars列表(使用class_copyIvarList()),我已经得到了伊娃类型(使用ivar_getTypeEncoding()),现在我想确保伊娃正在填充兼容值。 (例如NSArray伊娃应该填充NSArray)。我可以做if/else检查使用isKindOfClass,但我在想是否有另一种方式,我只是比较伊娃的类型编码和传入的参数。 –

回答

2

@encode()是一个编译时构造;它只知道变量的类型,而不是运行时将包含在对象中的对象的类。任何对象类型的变量都将编码为@

您将不得不使用运行时检查,询问对象的类,以实现您的目标。

相关问题