方法名称如何存储在运行时内存中?

时间:2011-06-21 20:08:39

标签: objective-c

出于兴趣,如何在编译的Objective-C中将方法名称存储在内存中?感兴趣的主要原因是更好地理解动态类型。

提前致谢!

1 个答案:

答案 0 :(得分:3)

如果你真的想深入了,那么运行时的源代码是可用的。

总之;方法名称 - 它们的选择器 - 在二进制文件的mach-o中存储为C字符串。即如果你有方法-(void)foo:(int)a bar:(int)b;,那么在mach-o中会有一个选择器foo:bar:字符串。

类型编码信息也存储在mach-o文件的不同段中。该类型信息 - 运行时中有API来检索它 - 描述了返回值的类型和方法的参数。

请注意,类型信息不完整。还要注意,使用类型信息来弄清楚如何对参数进行一般编码/解码以及从方法返回值是一种彻头彻尾的痛苦。