@property 是objective-c的一项特性,用于封装对象中的数据,自xcode4.5开始,@synthesize可以省略,objective-c通常会把所需的数据保存在实例变量中,可以过存取方法来访问,其实包括getter方法和setter方便,用@perporty生命变量,编译器会自动合成存取方法。
例如
@property NSString *name;
xcode4.5之前需要 @synthesize,表示生产getter和setter方法;
property 表示声明getter方法和setter方,
例如
@property NSString *name;
xcode4.5之前需要 @synthesize,表示生产getter和setter方法;
property 表示声明getter方法和setter方,
编译器还要自动向类中属性添加适当的类型实例变量,并且在属性名前加上下划线,以此作为实例变量的名称。
如果你不想使用下划线来命名实例变量,你也可要自己写,但是一般主张使用下划线。如果你想改变存储方法关联的方法,可要如下处理
@synthesize name = _firstName,_firstName 是你自己声明的实例变量。
若不想编译器实现存取方法,你可要自己实现,如果你只实现了一个存取方法,另一个还是会自动实现,如果你不想编译器合成存储方法 你可要通过关键字,@dynamic来处理
例如:@dynamic; 就不会自动合成存储方法了
属性的特质:
属性特质可分成四种。
第一种,原子性。在默认情况下,编译器合成的方法会通过锁定机制确保其原子性,(如果具备)nonatomic特质,则不需要同步锁。
第二种,读/写权限。(readwrite)可读写操作。(readonly)尽量使用不可变的,你可以使用该特质把某属性设置为对外可只读,然后在class - cotinuuation分类中,将其重新定义为读写属性
第三种,内存管理,
assign 基础类型,如 int ,double等。
strong该特质表示一种拥有关系,为拥有这种特质的属性设置新值时,先保留新值,会释放旧的值,然后把新值覆盖上去。
weak 表示非拥有关系,为拥有这种特质的属性设置新值时,既不保留新值,也不释放旧值,当属性所指的对象被摧毁时,属性值会清空。
unsafe - unretained 非拥有关系,对象被摧毁时 ,属性不会清空,而是继续指向该内存。
copy与strong相似,该特性并不保存新值,而是重新拷贝一份,如NSString
第四种,方法名。
getter == 《name》
@property (nonatomic,getter = isOn)Bool on;
setter = <name>
atomic与nonatomic有什么区别呢,atomic通过锁定机制来确保其操作的原子性,如果多个线程同时读写该属性,不任何时,都能看到有效的数据。一般使用nonatomic,主要是因为同步锁定开销大,会严重影响ios程序的性能。
本文深入讲解Objective-C中的@property特性,包括其如何简化存取方法的创建、不同属性特质的作用及意义,如nonatomic与atomic的区别,以及如何手动实现存取方法等内容。
1057

被折叠的 条评论
为什么被折叠?



