属性是Objective-C的一项特性,用于封装对象中的数据。Objective-C对象通常会把其所需要的数据保存为各种实例变量;而实例变量一般通过存取方法来访问。获取方法getter用于读取变量值,而设置方法setter用于写入变量值。
属性拥有的特质分为四类:
1.原子性,如果属性具备nonatomic特质,则不适用同步锁
2.读写权限
3.内存管理语义
assign--------只会执行针对"纯量类型"(例如CGFloat或NSInteger等)的简单赋值操作。
strong-----此特质表明该属性定义了一种"拥有关系",即为这种属性设置新值时,设置方法会先保留新值,并释放旧值,然后再将新值设置上去。
weak-----此特质表明该属性定义了一种"非拥有关系",为这种属性设置新值时,设置方法既不保留新值,也不释放旧值,此特质同assign类似,然而在属性所指的对象受到摧毁时,属性值也会清空。
unsafe_unretained ----适用于"对象类型",表达一种"非拥有关系"(不保留,unretained),当目标对象早到摧毁是,属性值不会自动清空这一点与weak有区别。
copy----此特质所表达的所属关系与strong类似。然而设置方法不保留新值,而是将其“拷贝”(copy).
4.方法名:可通过如下特质来指定存取方法的方法名。如
getter=<name>指定获取方法的方法名。如果某属性时Boolean型,则在其获取方法前加上is前缀,就可以用这个方法指定。
如@property (nonatomic, getter=isOn) BOOL on;
但是setter=<name>指定设置方法的方法名不常见。
在Objective-C中,属性(property)和成员变量是不同的。那么,属性的本质是什么?它和成员变量之间有什么区别?简单来说属性是添加了存取方法的成员变量,也就是:
@property = ivar + getter + setter;
网友评论