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