OC中属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?

readwrite:可读可改,同时生成get方法和set方法的声明和实现
readonly:只读不可改,只生成get方法的声明和实现(都不写默认是readwrite)
注:一般我们封装属性只希望外界能看到,自己能够修改的时候,在.h文件里用readonly修饰,在.m文件里面用readwrite修饰。

assign:是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;
retain:表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1
copy:表示拷贝特性,setter方法将传入特性复制一分;需要完全一份新的变量时
nonatomic:非原子操作,决定编译生成的getter setter是否原子操作,atomic表示多线程安全,一般使用nonatomic(非原子操作,决定编译器生成的setter和getter是否是原子操作,用atomic修饰时,在该属性在调用getter和setter方法时,会加上自旋锁(osspinlock),保证同一时刻只能有一个线程调用属性的读/写方,但并不能保证线程安全,(因为别的线程还能进行读写之外的其他操作,比如另一个线程调用了release方法,可能会导致crash)。因此大部分情况下使用nonatomic,线程安全需要开发者自己来保证。)

你可能感兴趣的:(OC中属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?)