objective-c类变量:何时调用dealloc?

时间:2009-03-19 06:28:05

标签: objective-c class variables static

如果我在Objective-C中声明类变量,什么时候释放内存?

如果我的界面是:

@interface TestClass : NSObject
{
}

+ (NSString)instanceCount;

@end

在实施中,我宣布:

static NSString instanceCount;

如何发布此类级变量?即什么时候dealloc在Objective-C中调用类变量?

1 个答案:

答案 0 :(得分:10)

您问题的简短回答是:“程序何时退出。”

main()函数开始之前,在程序的最开始分配静态变量。同样,它们会在main()退出后不久在程序的最后发布。这个内存管理由Objective-C运行时处理,这一切都发生在幕后。

如果您正试图监控此行为,您可能不会有太多运气。例如,如果您在自定义类中执行了以下操作,然后将该类用作另一个类的静态成员:

- (void)dealloc
{
    NSLog(@"I am being deallocated");
    [super dealloc];
}

您永远不会在日志中看到此消息。这有几个原因。一,NSLog()所需的变量可能已经被解除分配,作为正常关机程序的一部分。第二,因为运行时系统可以简单地一次性释放所有剩余的内存,而无需调用dealloc方法。

如果您的自定义类在其dealloc方法中执行重要操作,则可能会出现问题。如果是这种情况,请考虑编写一个自定义cleanup方法,在程序退出之前调用这些方法。