说我有一个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
只会有所帮助,但我无法理解为什么需要保留类成员。
请帮我理解这个:-) 感谢。
答案 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