1.readwrite代表写了属性的setter和getter方法的声明和实现
2.readonly代表写了属性的getter方法的声明和实现,没有写setter方法
3.assign代表属性的setter方法是直接赋值,用于基本数据类型
4.retain代表setter方法的实现是release旧值,retain新值,用于OC对象类型
5.copy代表setter方法的实现是release旧值,copy新值,用于NSString、block等
6.nonatomic是非原子性,代表setter方法的实现不加锁
注意区别:
1.默认是atomic,代表同一时刻只有一条线程可以访问,虽然线程安全,但是由于耗费性能,我们一般用nonatomic。
2.assign一般只修饰int、float值类型,虽然也可以修饰对象类型,但是对象被释放后,指针不会被置空,产生野指针的问题。weak修饰对象类型,当对象释放后,指针会自动置空。
3.copy和retain的区别是,如果用retain修饰nsstring类型对象,这个对象被可变类型字符串赋值,若在赋完值之后改变这个字符串的值得话,那么对象的值也会一起改变,所以不安全,用copy就会避免这种问题