如果我在 Objective-C 中声明类变量,什么时候释放内存?
如果我的界面是:
@interface TestClass : NSObject
{
}
+ (NSString)instanceCount;
@end
在实现中,我声明:
static NSString instanceCount;
如何释放这个类级别的变量?即,什么时候在 Objective-C 中为类变量调用 dealloc?
最佳答案
对您的问题的简短回答是:“当程序退出时。”
静态变量在程序的最开始分配,在 main()
函数开始之前。同样,它们将在程序的最后释放,在 main()
退出后不久。此内存管理由 Objective-C 运行时处理,并且全部发生在幕后。
如果您正在尝试监视此行为,您可能不会有太多运气。例如,如果您在自定义类中执行了以下操作,然后将该类用作另一个类的静态成员:
- (void)dealloc
{
NSLog(@"I am being deallocated");
[super dealloc];
}
您永远不会在日志中看到此消息。这有几个原因。第一,NSLog()
需要的变量可能已经作为正常关闭过程的一部分被释放。第二,因为运行时系统可能会一次性释放所有剩余内存,而不必费心调用 dealloc
方法。
如果您的自定义类在其 dealloc
方法中做了一些重要的事情,这可能会有问题。如果是这种情况,请考虑编写一个自定义 cleanup
方法,在程序退出之前为这些对象调用该方法。
关于objective-c 类变量 : when is dealloc called?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/661233/