我有一个-dealloc()方法,我假设我可以使用dealloc实例变量,我有另一个不在实例中的变量,而是一个类级变量,想知道什么时候&我怎么解除这个?我不能在实例方法dealloc()中做到这一点吗?以下代码供参考(在变量:levelHash上):
@interface Level : CCNode
{
//Instance variables
PlayBackgroundLayer* playBGLayer;
PlayTilemapLayer* playTilemapLayer;
PlayUILayer* playUILayer;
PlayElementLayer* playElementLayer;
}
//Property declarations for instance variables
@property (nonatomic, retain) PlayBackgroundLayer* playBGLayer;
@property (nonatomic, retain) PlayTilemapLayer* playTilemapLayer;
@property (nonatomic, retain) PlayUILayer* playUILayer;
@property (nonatomic, retain) PlayElementLayer* playElementLayer;
//Static methods
+(void) Initialize: (NSString*) levelReference;
+(void) InitLevel: (NSString*) levelReference;
+(Level*) GetCurrentLevel;
@end
//static variables
NSMutableDictionary *levelHash;
和我的实施:
+(void) Initialize: (NSString*) levelReference
{
levelHash = [[NSMutableDictionary alloc] init];
[levelHash setObject:NSStringFromClass([LevelOne class]) forKey:@"1"];
//EG CALL IT [levelHash objectForKey:@"foo"];
//WHEN DO I CALL THIS??? [levelHash release];
}
答案 0 :(得分:2)
在程序的生命周期中不会取消分配类,因此在发布该字典时似乎没有多大意义。应用程序使用的所有内存在终止时都会被回收。如果需要,可以为释放字典的类创建“拆除”方法,就像创建自定义初始化方法一样。
(顺便说一句,它既不是类也不是静态变量; ObjC没有类变量,缺少static
关键字,它实际上是全局的。这就是为什么没有必要担心泄漏 - 全局变量也存在于程序的整个生命周期中。
此外,您不应将其作为I mentioned earlier放在头文件中。导入此标头的每个文件都将重新定义它,这将导致链接器错误 - 您只能定义一次。)