1

我有一个 -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];
}
4

1 回答 1

2

在程序的整个生命周期内都不会释放类,因此发布该字典似乎没有多大意义。您的应用程序使用的所有内存在终止时都会被回收。如果需要,您可以为释放字典的类创建“拆卸”方法,就像创建自定义初始化方法一样。

(顺便说一下,它既不是类也不是静态变量;ObjC 没有类变量,并且缺少static关键字,它实际上是全局的。这就是为什么不需要担心泄漏的原因——全局变量也存在于程序的整个生命周期。

另外,你不应该把它放在你的头文件中,正如我之前提到的。导入此标头的每个文件都将重新定义它,这将导致链接器错误——您只能定义一次。)

于 2012-06-13T05:42:19.147 回答