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,线程安全需要开发者自己来保证。)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容