@property后面可以有哪些修饰符

1.线程安全类

atomic (原子属性),是通过锁定机制来确保其操作的原子性,使用atomic的情况下,如果两个线程同时访问同一个属性,无论何时都能取到有效的值。

nonatomic(非原子属性),如果使用nonatomic,当一个线程正在修改一个属性时,如果另一个线程突然闯入,读取的可能是未修改的属性值。

一般iOS开发中都会使用nonatomic属性,因为同步锁的开销比较大,会带来性能问题。原子属性也并不能保证‘"线程安全",如果要实现线程安全需要更深层的锁定机制。

无论是否是原子属性只是针对getter和setter方法而言,本质区别也就是setter方法的不同:

2.访问权限类

readwrite:可读可写属性 生成getter和setter 方法

readonly: 只读属性 只生成getter方法

3.内存管理类

assign:赋值属性,适用于基本数据类型:NSInteger、CGFloat等

retain:set方法的实现是release旧值,retain新值,用于OC的对象类型

copy:set方法实现是release旧值,copy新值,用于NSString、block 等类型

strong:强引用,指向的是一个内存的地址,只用OC对象才能使用改属性,它使对象的引用计数加一

weak:弱引用,只是单纯的引用某个对象,并没有拥有这个对象,只要没有强引用指向它,就会被清除释放。代理必须使用weak,因为代理是指向控制器的,会造成循环引用无法释放,从而内存泄漏。

4.getter和setter修饰符

这两个属性修饰符用于自己设置自定义生成的getter和setter方法名,使用之后将不会使用系统默认的getter和setter方法名

使用@proper ty的作用:编译器会自动生成getter和setter方法

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

推荐阅读更多精彩内容