属性

Objective-C的属性和成员变量用法及关系浅析

六眼飞鱼酱① 提交于 2019-11-27 13:06:11
在使用Objective-C语言进行了一段时间的iOS开发之后,发现自己的语言基础相对薄弱,于是开始弥补自己的短处。我发现在用过一种语言之后,再回过头来看它的很多原理会发现有更加深刻的理解。下面就对一直困惑我的属性和成员变量的用法和关系问题进行浅析,由于水平有限可能会有错误,请看过文章的人多多指正。 1、属性 关于属性的用法在苹果的官方文档《The Objective-C Programming Language》中有详细的说明,在这里就不再赘述,链接如下: 《The Objective-c Programming Language》 如果你的英文不好,没关系,已经有人把这个文档全部翻译完了,链接如下: Objective-C编程语言官方文档翻译 2、关于@synthesize object = _object 的解释 我们在很多代码中会见到这样的写法: [plain] view plain copy @interface MyClass:NSObject{   MyObjecct *_object; } @property(nonamtic, retain) MyObjecct *object; @end @implementatin MyClass @synthesize object=_object; 我在网上查阅了一些和其他人写的博文,总结了这样写的几条原因如下: (1

[C/C++]属性的秘密——C++仿C#的属性实作

自古美人都是妖i 提交于 2019-11-27 04:29:38
一直以来,我都想为C++引入C#里面定义的属性(Property),我尝试了几次: [C/C++]一个实现反射和事件绑定的例子 [C/C++]一个实现反射和事件绑定的例子 (增强版) [C/C++]模仿C#实作C++版属性绑定 读过上面三篇文章后就会发现,一直以来,我对属性的认识都是错误的,我的关注点全部放在了属性值的变化怎么被通知出去,而这在C#的属性定义中根本就是不被关注的。我们先看一下C#是怎么实现属性的。 首先我们写一个C#的普通类: class A { public double pp { get; set; } public double pv { get; protected set; } public double vp { protected get; set; } } 然后再看反编译之后的IL代码: 可以看到一个属性被分解成三块:域(Field)、getter和setter、存取器(Accessor)。 Field是C#类的成员变量被定义的地方,对应C++也是类的成员变量定义(可访问性为:private); getter和setter是C#类的成员函数,对应C++也是类的成员函数(可访问性为:private、protect或者public); Accessor才是C#真正实现属性语法的地方(如下图所示),对应C++可以使用operator运算符实现。