2009-09-22 87 views
0

讀取內存管理指南後,我試圖讓我的頭圍繞這裏發生了什麼我的理解「到目前爲止」是...訪問器方法對象管理?

- (EngineClass *)engine { 
    return [[engine retain] autorelease]; 
} 
  1. 我返回一個指向引擎對象。
  2. 對象的保留計數增加到記錄我們正在創建一個指向對象的新指針
  3. 通過在某個未來點指定autorelease來平衡上述保留。

我在正確的軌道上嗎?

歡呼-gary-

回答

1

我不知道我說的是保持「記錄我們正在做一個新的指針指向的對象。」

retain-autorelease對在那裏表明有另一個對象對返回值感興趣,所以它需要堅持至少那麼長,但另一個對象沒有正確擁有返回值。如果沒有保留,如果執行此方法的對象立即被釋放,引擎可能沒有任何其他所有者,並且也會立即釋放。這不是預期的行爲。這樣做會導致對象的所有權不會消失,直到自動釋放池被耗盡。

+0

謝謝,我現在看到,我沒有考慮將retain-autorelease作爲一對。此外,我認爲我越來越混淆,認爲增加保留以表明一個新對象現在指向引擎。我想我現在明白了。 – fuzzygoat 2009-09-22 10:11:07