使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等)
使用copy: 对NSString
使用retain: 对其他NSObject和其子类
assign就是简单的赋值,不更改引用计数,所以直接使用基础数据
copy是直接拷贝内容,成为一个新的对象。
retain释放旧的对象,将旧对象的值赋给新的对象,并使新的对象的引用计数加1
retain是指针拷贝 copy是分配新的内存属于内容拷贝,在拷贝之前都会释放旧的对象
在ARC中,retain和strong是一致的(声明为强引用);assign和weak是基本一致的(声明为弱引用)
=======弱引用(weak,assign)的出现缘由,以及区别=======================================
弱引用的出现缘由:防止循环应用。
强引用循环:A对象强引用了B对象,B对象也强引用了A。因为都是强引用,也就是无论是A是B都要在对方的引用断了后才能销毁,但要断了引用,就必须对方对象销毁。就会出现这种僵局,为了避免出现这种情况,就应该有一个对象“示弱”,使其为“弱引用”。 weak和assign的区别就是当对象被销毁后,weak会把指针指向的对象置为nil,而assign却不会,所以assign会引起野指针,比较危险。
比较常见的,视图中的父子视图之间的引用:父视图强引用子视图,子视图弱引用父视图。
===atomic与nonatomic====================================================
atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。