objective-c 类变量 : when is dealloc called?

标签 objective-c class variables static

如果我在 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/

相关文章:

objective-c - 指向 UITableViewCell 上自定义 UIView 的指针返回 0

ios - 使用segue传递图像时指针类型不兼容? objective-c Xcode

c++ - 类的 vector 不存储单独的纹理

c++ - 类方法的函数对象

ios - SecItemCopyMatching 不断返回 errSecItemNotFound

ios - 有没有办法更改 UITabBar 或 UITabBarItem 中的文本位置?

java - 注册对象字段值 Java

javascript - 在Nodejs中重新分配变量时,存储旧变量的内存会释放吗?

c - 外部声明和全局范围

Javascript:通过名称访问闭包中的局部变量或变量