如果我在Objective-C中声明类变量,什么时候释放内存?
如果我的界面是:
@interface TestClass : NSObject
{
}
+ (NSString)instanceCount;
@end
在实施中,我宣布:
static NSString instanceCount;
如何发布此类级变量?即什么时候dealloc在Objective-C中调用类变量?
答案 0 :(得分:10)
您问题的简短回答是:“程序何时退出。”
在main()
函数开始之前,在程序的最开始分配静态变量。同样,它们会在main()
退出后不久在程序的最后发布。这个内存管理由Objective-C运行时处理,这一切都发生在幕后。
如果您正试图监控此行为,您可能不会有太多运气。例如,如果您在自定义类中执行了以下操作,然后将该类用作另一个类的静态成员:
- (void)dealloc
{
NSLog(@"I am being deallocated");
[super dealloc];
}
您永远不会在日志中看到此消息。这有几个原因。一,NSLog()
所需的变量可能已经被解除分配,作为正常关机程序的一部分。第二,因为运行时系统可以简单地一次性释放所有剩余的内存,而无需调用dealloc
方法。
如果您的自定义类在其dealloc
方法中执行重要操作,则可能会出现问题。如果是这种情况,请考虑编写一个自定义cleanup
方法,在程序退出之前调用这些方法。