iOS retain,assign,strong,weak区别以及内存管理

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

你可能感兴趣的:(iOS retain,assign,strong,weak区别以及内存管理)