IOS OBjective-C 內存概念 (四、循環引用和總結)

1、循環引用和總結(內存管理的經典問題)code

    對象A retain對象B,同時對象B retain對象A。這時兩個對象A和B都沒有辦法獲得釋放。這種狀況咱們稱之循環引用。以下示:
對象

//B類中設置A
- (void)setA:(A *)a
{
   if(_a != a)
   {
      [_a release];
      _a = [a retain];
   }
}
- (void)dealloc
{
   [_a release];
   [super dealloc];
}
//A類中設置B
- (void)setB:(B *)b
{
   if(_b != b)
   {
      [_b release];
      _b = [b retain];
   }
}
- (void)dealloc
{
   [_b release];
   [super dealloc];
}

2、內存管理總結內存

    當你使用new、alloc或copy方法建立一個對象時。該對象的引用計數爲1。當不在使用該對象時,你要負責向該對象發送一條release或者autorelease消息。這樣,該對象將在其使用對象結束時銷燬。
內存管理

    你經過任何其餘方法得到一個對象時,則假設該對象的引用計數爲1,並且已經被設置爲自動釋放,你不須要執行任何方法來釋放對象。若是你打算在一段時間內擁有該對象,則須要保留它並確保在操做完成時釋放它。
table

    若是你保留了某個對象,你須要釋放或自動釋放該對象。必須保持retain方法和release方法的使用次數相等。
class

    除了alloc、new或copy以外的方法建立對象都被聲明瞭autorelease。誰retain,誰release。只要你調用了retain,不管這個對象是如何生成的,你都要調用release。
循環

相關文章
相關標籤/搜索