【问题标题】:Memory Management in Objective-C with static objects [duplicate]Objective-C中的内存管理与静态对象[重复]
【发布时间】:2011-11-14 21:50:23
【问题描述】:

可能重复:
Objective-C/iPhone Memory Management Static Variables

我正在查看不再与我们在一起的承包商的代码,但我不确定在这种情况下如何处理内存管理。有一个

static NSArray *_sharedSample = nil;

在 .m 文件中声明。然后他们做

_sharedSample = [[NSArray arrayWithObjects:someinfo here, nil] retain];

那么在这种情况下,发布在哪里?我在整个项目中搜索了 _sharedSample,但没有看到 [_sharedSample 版本];。静态对象的工作方式不同吗?我想我必须在某个地方发布它。谢谢。

【问题讨论】:

标签: iphone


【解决方案1】:

静态变量实际上是一个应用程序全局变量,无论有多少对象、方法或函数知道它。

您可以选择离开它。应用退出时系统会释放内存。

您应该像这里一样在声明行中将静态变量初始化为 nil(零)。静态变量在启动过程中比调用应用程序的 main() 函数更早分配。这意味着将不存在任何分配池。

如果您尝试在创建第一个池之前创建一个 Objective-C 对象,您可能会导致内存泄漏。 (如果这样做,您将在调试器控制台中看到“刚刚泄漏”的消息。)

如果你确实释放了一个静态变量,你也应该立即将它设置为 nil 以防止过度释放或悬空指针的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-09
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    相关资源
    最近更新 更多