在ARC出现之前,用retain,assign,copy,修饰变量。
(1)当变量被设置为retain属性,对该变量进行赋值时先release旧的对象(旧对象引用计数减一),再retain(持有)新对象(新对象引用计数加一)。通常继承自NSObject的类对象属性设置为retain;
(2)当变量被设置为copy属性,对该变量进行赋值时,重新创建一个对象(新内存),复制内容到内存中,新对象的引用计数为1,原对象的引用计数不变。NSString类对象的属性设置为copy。
(3)当变量被设置为assign属性,对变量进行赋值时,两个变量的内存地址完全相同,对任何一个操作就等于对另一个操作。通常基本数据类型设置为assign属性。
总结,retain是浅拷贝即指针拷贝,copy是深拷贝即内容拷贝,assign只是相当于对另一个变量起了一个别名。
在ARC出现时候,出现strong,weak两个新属性
其中strong相当于原来的retain,weak相当于原来的assign |
|