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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容