MRC:
retain: 用于指针变量。就是说你定义了一个变量,然后这个变量在程序的运行过程中会被更改,并且影响到其他方法。一般是用于字符串( NSString,NSMutableString),数组(NSMutableArray,NSArray),字典对象,视图对象(UIView ),控制器对象(UIViewController)等
assign: 用于非指针变量,基础数据类型 (例如NSInteger)和C数据类型(int, float, double, char, 等),另外还有id
ARC:
strong(强引用): 相当于MRC下的retain
weak(弱引用): 相当于MRC下的assign
copy与retain区别:
retain是指针拷贝,set方法应该是浅复制。
copy是内容拷贝,set方法应该是深复制了。copy只用于NSString而不能用于NSMutableString。
//copy其实是建立了一个相同的对象,而retain不是;
比如一个NSString对象,地址为0x1111,内容为@”STR”,copy到另外一个NSString之后,地址为0x2222,内容相同,新的对象retain为1,旧的对象没有变化;retain到另外一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1。
关于引用计数
- 生成对象并设置引用计数 = 1 : alloc,new,copy,mutableCopy (不需要时,必须释放)
- 持有对象,使引用计数 + 1 : reatain (不需要时,必须释放)
- 释放对象,使引用计数 - 1 : release
- 废弃对象,使引用 = 0 : dealloc