@property参数
1. set方法处理
参数列表 |
参数 |
说明 |
原子性 |
atomic |
对属性加锁,多线程下安全,默认值 |
nonatomic |
对属性不加锁,多线程下不安全,但速度更快 | |
读写属性 |
redwrite |
生产getter、setter方法,默认值 |
readonly |
只生产getter方法 | |
set方法处理 |
assign |
直接赋值,默认值 |
retain |
先release原来的值,再retain新的值 | |
copy |
先release原来的值,再copy新值 |
什么时候retain?
在一个类中又关联其他对象的时候,这个对象的@property (nonatomic, retain)
什么时候使用assign?
实例变量是基本数据类型
2.是否要生产set方法(若为只读属性,则不生成)
readonly:只读,只会生产getter的声明和实现
readwrite:默认的,同时生成setter、和getter方法
修改set和get方法的名称,主要用于布尔类型,因为返回布尔类型的方法名一般以is开头,修改名称一般用在布尔类型中的getter
@property (nonatomic, assign, setter=isPerson:, getter=isPerson) BOOL person;
可以理解为[p setPerson:] --> [p isPerson:] [p getPerson] --> [p isPerson]
注:setter = isPerson: 后面有一个冒号
3.多线程管理
nonatomic:高性能,一般使用这个
atomic:低性能,默认