天天看點

oc基礎-oc中的記憶體管理arc

1.有alloc,new,copy建立出來的對象就必須有release,在類中是retain對oc類型對成員在該類對dealloc方法中也要release

2.一旦對象直接有引用關系,那麼就一定有retain,同時在主對象銷毀時,也必須對其引用對對象release。但是對象引用時,在retain時

    注意是否引用對時同一個對象,若是不同對象就得先release舊對象,再retain新對象

代碼:

-(void)setDog:Dog dog

{

  if(dog!=_dog)

  {

    [_dog release];

    [dog ratain];

    _dog=dog;

  }

}      

舉例:一個人買了一輛車,那麼現在這個人擁有了這輛車,也就是車的retain一次,當這個人買了新車了,那麼之前那輛車就和這個人沒有關系了

        那麼就的release一次舊車,然後再retain一次新車,若這輛車沒有換,那麼就不做任何操作。如果人挂了的話,這輛車就會可能給别人,所

        以,必須再人挂的時候,将車release一次,相當于解除了這個人和這輛車的關系了

[email protected]關鍵字,用于簡化我們頻繁的寫set,get的代碼,他将會自動生産對于的方法,和字段(都是有一定的命名規範的,setXx ,xx,_xx)

   @property的參數:

       a.set方法記憶體管理的參數(各參數不能同時有)

          retain:會自動release舊對象,retain新對象,适用于oc類型對象,如2代碼

          assign:直接指派給對象成員,适用于非oc類型的對象

      copy:release舊值,copy新值

   b.是否生成set方法  (各參數不能同時有)

      readwrite:可讀可寫,即set和get方法都會生成

      readonly:隻讀,隻生成get方法

      c.多線程管理(各參數不能同時有)

    nonatomic:性能高,通常都是用該參數

        atomic:性能低,預設的參數

      d.setter和getter重設方法的名稱

    setter:給set方法重命名,但是必須有冒号 ' : '

    getter:給get方法重命名,一般用在bool類型的屬性上

eg。 @property (nonatomic,readwrite,assign,setter=abc: )  int age

       @property (nonatomic,retain) Dog dog

  當用了setter或getter重命名方法時,再使用該對象時可以直接用  對象.成員名稱 來取值或指派,工具會自動檢測時再用get還是

  set方法的

[email protected] 關鍵字:聲明一個類,但是沒有類裡的實作,僅僅時做一個聲明,給編譯器看的,再運作的時候才去找實作

    代替的import導入檔案

    使用的好處:解決裡兩個類互相引用的問題(import時不能互相導入的)

        提高類程式的性能(用import的話,每次被導入的檔案被改動,都會重新複制一份到目前類中,消耗性能,而class不用管)

5.當兩個類互相引用時,再各自當dealloc方法中就必須對引用對對象release一次,這樣就導緻兩個對象被咬死,無法釋放記憶體,

 解決方案:再其中任意一個類中,将引用另一個類對熟悉對property參數寫成assign

轉載于:https://www.cnblogs.com/hui1107464497/p/4508787.html

繼續閱讀