出于兴趣,如何在编译的Objective-C中将方法名称存储在内存中?感兴趣的主要原因是更好地理解动态类型。
提前致谢!
答案 0 :(得分:3)
如果你真的想深入了,那么运行时的源代码是可用的。
总之;方法名称 - 它们的选择器 - 在二进制文件的mach-o中存储为C字符串。即如果你有方法-(void)foo:(int)a bar:(int)b;
,那么在mach-o中会有一个选择器foo:bar:
字符串。
类型编码信息也存储在mach-o文件的不同段中。该类型信息 - 运行时中有API来检索它 - 描述了返回值的类型和方法的参数。
请注意,类型信息不完整。还要注意,使用类型信息来弄清楚如何对参数进行一般编码/解码以及从方法返回值是一种彻头彻尾的痛苦。