@encoding for type id其中id实际上是任何对象

时间:2014-02-23 09:21:56

标签: ios objective-c types runtime objective-c-runtime

我有以下方法。

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

此方法始终返回@"@"是否在obj中传递NSNumber, NSArray, NSDictionary or NSString类型的变量。我假设它正在检查obj指针类型。

我该怎么做才能返回我传递的变量的实际类型编码?

1 个答案:

答案 0 :(得分:2)

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

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