[Objective-C] @property是不能被“预处理”的,而是直接编译成汇编指令

转载 2015年07月07日 07:27:09

参考:http://stackoverflow.com/questions/31241643/how-can-i-get-direcitve-preprocessed-objective-c-code


对于下面的Objc代码,我们想看到@property被“预处理”之后长什么样子

// ========= Person.h =========
@interface Person: NSObject
{
}
-(void) Print;
@property int age;
@end

// ========= Person.m =========
@implementation Person
-(void) Print
{
    NSLog(@"Print_Age:%d", _age);
}
@end
我们期望看到它是长这样的:

// ========= Person.h =========
@interface Person: NSObject
{
    int _age;
}
-(void) Print;
-(int) age;
-(void) setAge:(int) age;
@end

// ========= Person.m =========
@implementation Person
-(void) Print
{
    NSLog(@"Print_Age:%d", _age);
}
-(int) age {
    return _age;
}
-(void) setAge:(int) age {
    _age = age;
}
@end
事实上,最终的代码确实可以理解成是上面那样的。但是要注意的是,@property、@synthesize 这样的东西不像 #define xxx yyy 是可以被编译器预处理的,@property、@synthesize 会被编译器直接编译成汇编代码,不存在“预处理中间代码”阶段,因此我们不可能看到上面那样的“中间代码”。就好比 for/while/switch/case 这样的最基本的关键字,它们最终是怎么工作的,编译器不会通过中间代码的形式呈现给用户,而是直接编译成汇编指令。

如果一定要深究最终编译器做了些什么,它把 @property、@synthesize 是怎么处理的,可以在 XCode 中点击菜单中的 Product -> Perform Action -> Assemble XXX 来查看最终的汇编代码。


相关文章推荐

Objective-C编译成C++代码报错

runtime机制转成的C++代码是什么样子的,在进入项目目录中,执行cc -rewrite-objc ViewController.m时如下错: In file included from View...

把proto文件编译成objective-c文件

转自:http://blog.csdn.net/kbeanwu/article/details/7463206     kbeanwu的专栏  protocol buffer 是 google 的一...

在linux中把汇编或c程序交叉编译成二进制文件烧录开发板过程详解

嵌入式开发中在宿主机中要编译能在目标机中运行的程序文件需要用到一种工具:交叉工具链。其中我们常用的交叉工具有以下几种:交叉编译器,交叉连接器,交叉转换器,交叉ELF文件工具,交叉反汇编器。以下通过实例...

art 是怎么把 dalvik 指令编译成 native code 第二篇(走马观花)

QuickCompiler 分析 1第二篇进行到 QuickCompiler 的分析,先说QuickCompiler是因为这是android art 御用选项。class QuickCompile...

java开发C编译器:把函数调用编译成字节码

本节,我们研究如何把函数声明和函数调用转换成可执行的java 字节码,在完成本节代码后,我们的编译器能把下面代码编译成可被java 虚拟机执行的字节码,示例代码如下: void f() { p...

mac os x 将C文件编译成.so库

应用背景 将C语言写好的代码提供给unity调用,项目要在Android手机上运行,所以要将C代码编译成.so库。 步骤: 1、下载安装Android studio(其实也可以不下载,楼主为了省事,直...

wamcc:将Prolog编译成C (No.7-6)

6. 绩效评估 现在让我们细化wamcc系统的系统并比较其他Prolog系统,无论是学术或商业。 6.1 基准程序 表1给出传统基准wamcc的表现。时序以秒为单位的Sparc2(2.85MIP...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)