0

假设我有一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只是有帮助,但我不明白为什么需要保留类成员。

请帮助我理解这一点:-) 谢谢。

4

2 回答 2

2

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

底层retain是增加对 的引用计数keyNodes,这向系统发出信号,表明又有一个对象有兴趣将任何keyNodes指向的对象保留在内存中。同样,您应该在您的方法中调用releasekeyNodesdealloc将减少保留计数,因为您的引擎不再“拥有” keyNodes

于 2012-05-27T12:24:20.860 回答
0

如果您想维护keyNodes对象直到BasicEngine可用,您还可以使用单例模式实现使其成为静态。

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

于 2012-05-27T12:29:38.970 回答