自动释放:必须[保留]成员变量?

时间:2012-05-27 12:20:51

标签: objective-c memory-management retain autorelease

说我有一个BasicEngine课程:

@interface BasicEngine : GfxEngine{

    NSMutableDictionary *keyNodes;
    AbstractVirtualJoystick *input0;
}

相关实施如下:

@implementation BasicEngine
- (id)init {

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

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

我的理解是调用[ dictionary]会返回一个自动释放的对象。但是,只要BasicEngine实例可用,该字典就应该保存在内存中。

我意识到我错过了一些东西,因为keyNodes很快成为nil对象。 在[keyNodes retain]方法中使用init只会有所帮助,但我无法理解为什么需要保留类成员。

请帮我理解这个:-) 感谢。

2 个答案:

答案 0 :(得分:2)

retain意味着对保留者的保留者的所有权。由于keyNodes是一个类成员,因此您的引擎“拥有”它,因此应该retain

引擎盖retain正在增加keyNodes上的引用计数,它向系统发出信号,表示另一个对象有兴趣在内存中保留任何keyNodes点。同样,您应该使用release方法在keyNodes上致电dealloc,这将减少保留计数,因为您的引擎不再“拥有”keyNodes

答案 1 :(得分:0)

如果您希望在keyNodes可用之前维护BasicEngine对象,您还可以使用单例模式实现它们,使其保持静态。

另见:http://xperienced.com.pl/blog/3-ways-to-implement-singleton-pattern-in-objective-c