天天看點

dealloc和release的關系

本文請結合本部落格中的《剖析dealloc》進行閱讀;

    在介紹release之前,先引入“引用計數"的概念,引用計數和記憶體是密切相關的,這一概念的提出就是針對記憶體提出的,即:我這一塊記憶體有幾個人在用;

    引用計數的使用原則:

    a 當使用到alloc,new和copy登關鍵字時(初始化),引用計數一定為1;

    b當對象被retain之後,引用計數加1;

    c當對象被release之後,引用計數減1;

通過下面的程式來更好地了解引用計數這個概念

   NSString * str=[[NSString alloc]init];//初始化,由于用到了alloc,是以指針str指向的記憶體的引用計數一定為1;

  [str retain];//通過引用計數的引用規則可以知道,引用計數加1,此時引用計數為2;

  [str release];//根據原則引用計數減1,此時引用計數為1;

如果我們想要檢視對象的記憶體的引用計數,就能通過retaincount這個屬性進行檢視;

即:

  nslog(@"str:%d",str.retaincount);

或者

  nslog(@"str:%d",[str retaincount ]);

而當系統引用計數為0之後,系統會自動調用dealloc方法,注意!是自動調用,而不是手動,為什麼不能手動,可參見本部落格《剖析dealloc》一文;

綜上所述:dealloc是否調用完全取決于記憶體的引用計數,當記憶體的引用計數為0時,才會調用dealloc方法,而降低引用計數,正是通過release實作的;

繼續閱讀