@synthesize和@property

 @property (attributes) type name;

attributes可以是 readwrite (默认的) 或是 readonly. 如果使用readonly,那么就只有getter方法. 我们也可以通过:assign, retain,copy属性来指定setter方法的工作方式
 assign(默认) 简单的赋值, assign不会对新的值做retain. 如果使用对象类型的参数,同时没有启用garbage collector.我们不要使用assign
 retain: release旧的值,同时retain新值. 这个属性用在参数为Objective-C对象类型时. 如果启用了garbage collector, 它和assign作用一样. [启用了garbage collector. release和retain什么也不做.]
 copy: 对新值做拷贝,把拷贝赋值给变量. 变量为string时,常用该属性.

最后,我们还可以使用nonatomic属性. 如果我们的程序是多线程的. 那么让setter方法成为atomic是非常重要的. 也就是说, 不同的线程访问同一个setter方法时,不对产生冲突[线程重入]. 如果没有启用garbage collector. 默认的会使用锁机制来保证在同一个时间点,只能由一个线程来调用一个setter方法. 因为创建和使用锁会产生一些资源消耗.所以如果我们能够保证accessor方法不需要atomic. 我们可以使用nonatomic属性来减少这种消耗.

原文地址:https://www.cnblogs.com/hgy413/p/3693554.html