copy(浅拷贝):复制的对象和原对象都指向同一地址,不会开辟新的内存空间
mutableCopy(深拷贝):内容拷贝,会开辟新的内存空间
1、NSMutableString、NSMutableArray和NSMutableDictionary等不要用copy修饰,否则可变对象->不可变,进行修改操作会崩溃。可用mutableCopy修饰
2、自定义对象要想使用copy或mutableCopy,必须要实现NSCopying协议或NSMutableCopying协议,否则会导致程序崩溃
完全拷贝(多层拷贝)需使用归档和解档
strong:
ARC下的strong等同于MRC下的retain都会把对象引用计数加1
weak:
1、修饰Object类型,修饰的对象在释放后,指针地址会被置为nil,是一种弱引用
2、在ARC环境下,为避免循环引用,往往会把delegate属性用weak修饰
weak和strong不同的是:当一个对象不再有strong类型的指针指向它的时候,它就会被释放,即使还有weak型指针指向它,那么这些weak型指针也将被清除。
代理为什么使用weak修饰?
1、weak指明该对象并不负责保持delegate这个对象,delegate的销毁由外部控制
2、如果用strong修饰,强引用后外界不能销毁delegate对象,会导致循环引用
assign
1、用于对基本数据类型进行赋值操作,不更改引用计数
2、之所以可以修饰基本数据类型,因为基本数据类型一般分配在栈上,栈的内存会由系统自动处理,不会造成野指针。
3、也可以用来修饰对象,但是被assign修饰的对象在释放后,指针的地址还是存在的,指针并没有被置为nil,成为野指针