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方法