2012-05-27 82 views
0

說我有一個BasicEngine類:Autorelease:必須[保留]成員變量?

@interface BasicEngine : GfxEngine{ 

    NSMutableDictionary *keyNodes; 
    AbstractVirtualJoystick *input0; 
} 

的相關實施去如下:

@implementation BasicEngine 
- (id)init { 

    if ((self = [super init])) { 

     keyNodes = [NSMutableDictionary dictionary]; 
    } 
    return self; 
} 

我的理解是,調用[ dictionary]返回一個自動釋放的對象。但是,只要BasicEngine實例可用,該字典應保存在內存中。

我意識到我錯過了一些東西,因爲keyNodes很快就變成了nil對象。 在init方法中使用[keyNodes retain]只是幫助,但我不明白爲什麼需要保留一個類成員。

請幫我理解這一點:-) 謝謝。

回答

2

retain意味着被保留人的所有權。由於keyNodes是類成員,因此您的引擎「擁有」它,因此應該在retain之上。

在引擎蓋下retain正在增加keyNodes上的引用計數,這會向系統發出信號,表明另一個對象有興趣保持內存中的任何點。同樣,您需要在dealloc方法中調用keyNodes上的releaserelease,這會減少保留計數,因爲您的引擎不再「擁有」keyNodes

+0

啊感謝,簡潔明瞭的解釋,肯定添加這對我的小抄;-)感謝Kevboh! – Jem

+1

沒問題。如果您有任何問題,請告訴我,我很樂意回答。 Apple在內存管理方面也有一些很好的文檔[這裏](https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html)。 – kevboh