@property一般可存放三种类型的属性,一般我们可以选择其中的一种或者即为@property(A,B,C)
a.第一种表示的是可读性
readonly:表示该变量只是可读,但是不能修改。
readwrite:表示变量的值既可读也可以修改。
b.第二种表示原子性
natomic:默认属性,在多线程情况下会生成一些互斥加锁代码,避免变量的读写不同步的问题。
nonatomic:非原子性访问,不加同步,多线程并发访问会提高性能。
c.第三种表示内存管理
assign:setter 方法直接赋值,引用计数器不会增加,为了解决原类型与环循引用问题,一般用于简单的数据类型int,float等就用它。
retain:使用reatin的话,赋值的时候引用计数器会+1,防止被内存释放掉。拷贝类型属于指针拷贝。
copy:使用copy的话,赋值的时候引用计数器会+1,防止被内存释放掉。拷贝类型属于内容拷贝。
strong:强引用,其存亡直接决定了所指对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示列表中,则此对象会被从内存中释放。简单讲strong等同于retain。
weak:弱引用,不决定对象的存亡。即使一个对象被持有无数个若引用,只要没有强引用指向他,那麽其还是会被清除。简单讲weak比assign多一个功能,就是当对象消失之后会自动把指针变为nil。