我的问题是:如果我有这样的类定义:
@interface ClassA { int var1; float var2; ID var3;}-(voID) method1;-(int) method2: (int) num1;@end@implementation ClassA-(voID) method1 { // Implementation of the method}-(int) method2: (int) num1 { // Implementation of the method}@end
它是由编译器转换成的(在Objective-C的2.0版本中)?是否转换为对objc_allocateClasspair(),class_addivar(),class_addMethod()和objc_registerClasspair()等函数的调用,以便创建类,添加其实例变量,添加其方法并分别注册类(以便类struct实际上是在运行时定义的,而不是从可执行文件中作为结构加载的)?
解决方法Since Objective-C is a C superset,all Objective-C specific statements
are converted into C statements during the compiling of a .m file (by
the preprocessor,I guess).
这种情况在1988年也是如此.尽管Objective-C仍然可以以这种方式编译,但它还没有很长时间.
编译器解析Objective-C,以及C和 – 有时 – C,并发出表示后预处理输出的抽象语法树[AST]. AST直接包含各种Objective-C定义.
请注意,GCC编译和LLVM编译的细节是不同的.
如果查看已编译的输出,您将看到mach-o文件(可执行产品)在文件中包含Objective-C元数据的各个部分,包括类定义,选择器表,ivar布局等. ..编译器将此元数据生成到.o文件中,然后链接器将它们全部混合在一起,消除重复信息(不是重复的符号),并编写mach-o.
正如在另一个问题中提到的那样,您可以使用Objective-C重写器将Objective-C重写为直接C,但结果代码效率低,与规则编译管道有很大不同.
@H_301_0@ 总结以上是内存溢出为你收集整理的什么是由GCC或Clang转换成的Objective-C 2.0类接口和实现全部内容,希望文章能够帮你解决什么是由GCC或Clang转换成的Objective-C 2.0类接口和实现所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)