Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios @类型id的编码,其中id实际上是任何对象_Ios_Objective C_Types_Runtime_Objective C Runtime - Fatal编程技术网

Ios @类型id的编码,其中id实际上是任何对象

Ios @类型id的编码,其中id实际上是任何对象,ios,objective-c,types,runtime,objective-c-runtime,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或NSString的变量,此方法始终返回@“@”。我假设它

我有以下方法

- (void)someObject:(id)obj {
  char* encoding = @encoding(typeof(obj));
  NSString *s = [NSString stringWithCString:encoding encoding:NSUTF8StringEncoding];
  NSLog(s);
}
无论我在obj中传递类型为
NSNumber、NSArray、NSDictionary或NSString的变量,此方法始终返回
@“@”
。我假设它正在检查
obj
指针类型

我必须做什么才能使它返回我传递的变量的实际类型编码?

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


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

您所说的“变量类型编码”是什么意思?你在期待什么?关键是取消引用
id
不透明类型是没有意义的(因此@encode响应是正确的,因为
id
是一个对象,意思是
@
)……出于好奇,你想用它做什么?@HepaKKes:我试图从字典中为类的ivar赋值。我有一个ivar列表(使用class_copyIvarList())和ivar类型(使用ivar_getTypeEncoding()),现在我想确保ivar中填充了兼容的值。(例如,NSArray ivar应填写NSArray)。我可以使用isKindOfClass进行if/else检查,但我在想是否有其他方法可以比较ivar的类型编码和传入参数。@Merlevede:请参阅我上面的评论,