本文請結合本部落格中的《剖析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實作的;