[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 来查看最终的汇编代码。


【iOS沉思录】深思Objective-C中的property属性

OC中的属性 属性(Property)是Objective-C语言的其中一个特性,它把类对象中的数据变量及其读写方法统一封装起来,是对传统C++中反复定义变量读写方法的一种封装优化,OC将这些变量封装...
  • cordova
  • cordova
  • 2016年11月22日 19:21
  • 1678

黑马程序员——Objective-c——property和class

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- @property 1、set方法内存相关参数  *retain : release旧值,...
  • LONGLINDU
  • LONGLINDU
  • 2015年03月24日 14:47
  • 318

iOS中Objective-C与JavaScript之间相互调用的实现

原文地址:http://blog.csdn.net/zhaoxy_thu/article/details/22794201 最近在iOS项目中需要使用到oc与js之间的相互调用,而且要求是实...
  • jianzhanger
  • jianzhanger
  • 2015年09月30日 09:59
  • 1353

Objective-C分类中不能直接添加属性

概述在某个类的分类的.h文件中直接声明@property属性, 系统(或者说是Xcode)会做两件事情: ①. 只会在该类的属性列表中增加一个新的属性; ②. 在.h文件中声明对应的getter和se...
  • qfeung
  • qfeung
  • 2016年11月20日 01:26
  • 199

ARC使用心得(二)

四、使用ARC需要注意的问题 1、ARC中读写相关的属性 读写相关的属性有 readwrite 和 readonly 两种,如果使用ARC之后,我么需要注意一下 readonly 属性的使用。 比...
  • wzzvictory_tjsd
  • wzzvictory_tjsd
  • 2013年11月21日 18:25
  • 5683

使用Xcode工具开发Objective-C程序

1.启动X-code,单击屏幕顶端的File➡️New➡️Project,或者直接点击页面中的Create a new Xcode project, X-code将会弹出如下图所示的新建项目的对话框...
  • tangjun201
  • tangjun201
  • 2015年05月04日 20:50
  • 603

Objective-C中@property的所有属性详解

1,assign : 简单赋值,不更改索引计数 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此...
  • tenso_gu
  • tenso_gu
  • 2015年09月18日 10:35
  • 115

Objective-C中@property的所有属性详解

1,assign : 简单赋值,不更改索引计数 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此时a 和...
  • qq331570870
  • qq331570870
  • 2016年10月23日 20:48
  • 82

【知识梳理向】Objective-C中的@property

1.@property是什么 @Property是声明属性的语法,它可以快速方便的为实例变量创建存取器,并允许我们通过点语法使用存取器。 存取器(accessor):指用于获取和设置实例变量的方法...
  • ILOVELITTLEFATTER
  • ILOVELITTLEFATTER
  • 2015年02月04日 19:17
  • 159

Objective-C中@property的所有属性详解

1,assign : 简单赋值,不更改索引计数 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此...
  • weasleyqi
  • weasleyqi
  • 2015年07月27日 14:44
  • 645
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Objective-C] @property是不能被“预处理”的,而是直接编译成汇编指令
举报原因:
原因补充:

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