属性的特性是一些修饰符, 影响属性对应的setter,getter方法的内部细节
属性的特性第一类 读写性
1.readonly 只读, 属性生成了 getter方法, 没有setter方法
@property (readonly) NSString *gender;
2.readwrite,可读可写,属性既生成了setter,也生成了getter 读写性控制中,readwrite是默认的修饰符, 所有属性,如果不加修饰,全部都是可读可写的
@property (readwrite) NSString *name;
3.setter= ,修改的是setter方法的方法名
4.getter= 修饰的是getter方法的方法名
@property (readwrite, setter=aa:, getter=bb) NSInteger age;
属性的特性第二类 原子性
1.atomic,原子性,默认修饰符, 保证了实例变量在多线程情况下访问是安全的,通过不断的加锁解锁实现在同一时刻实例变量只能被一个线程访问,但是不断的加锁解锁会耗费大量的CPU性能,所以虽然是默认的,但是我们不会采用
2.nonatomic,非原子性,属性常用的修饰符
@property (nonatomic) NSString *habby;
属性的特性第三类 语意特性
语义不同,直接决定了属性对应的setter,getter方法内部实现的不同
1.assign 修饰的属性是非对象类型
2.retain 所有对象类型的属性,都可以用retain修饰
3.copy copy也是用来修饰对象类型的属性,但是一定要保证,代表属性类型的这个类。必须接收了NSCopying协议,而且实现了copyWithZone :方法。字符串通常常用copy修饰
@property (nonatomic) CGFloat height;
@property (nonatomic, retain) NSString *school;
@property (nonatomic, copy) NSString *major;