属性

属性的特性是一些修饰符, 影响属性对应的settergetter方法的内部细节

属性的特性第一类  读写性

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;

 

属性的特性第三类  语意特性

语义不同,直接决定了属性对应的settergetter方法内部实现的不同

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;

原文地址:https://www.cnblogs.com/hjplcl/p/5204326.html