今天介绍下object-c中的属性,总结思考整理此文。
2007年10月 Apple发布了Object-C 2.0, 其中两项最重要的特性是:1. 支持属性(Property) 2.垃圾回收器(garbage collection)
属性Property, 能够自动生成设置函数方法和获取函数方法。
语法如下:
@property 类型 名字
属性主要分为三类: 1. 读写属性(readwrite/ readonly)
2. Setter属性 (assign/retain/copy)
3. 原子属性 (atomicity/nonatomic)
如果属性是对象类型,你需要使用retain,assign,copy参数,表示setter方法内部实现的时候,持有对象的方式。其中retain就是增加引用计数,强引用类型。assign就是变量的直接赋值,弱引用类型,也是默认值。copy就是把setter的参数复制一遍,再赋给成员变量。 如果你不给出持有对象的方式,编译器就会给出警告。
原子属性中,atomic是默认值,表示属性是原子的,支持多线程并发访问(在setter实现中加入了同步锁),后者是非原子的,适合在非多线程环境中提升效率,没有加入同步锁。
示例代码如下:
声明部分如下:
其中 a,b两行代码经过编译器生成如下代码:
实现部分:
其中c,d部分经过编译器生成如下代码:
看来属性确实帮我们节省了不少的代码, 但是使用它来偷懒前,可得清楚上述这些暗地里的“玄机”哦