释放已分配内存的简单问题

时间:2010-08-01 14:51:15

标签: iphone memory memory-leaks

在几个示例代码中可以找到这个

static NSNumberFormatter *numberFormatter = nil;
if (numberFormatter == nil) {
    numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter setMaximumFractionDigits:6];
}

该代码是否会产生内存泄漏?或者是否有一些内置的魔法,可以释放分配的内存?

此致

5 个答案:

答案 0 :(得分:4)

在我看来,这段代码来自某个实现“单例模式”的地方,或者与它非常相似的东西。 由于变量是static,因此将在函数调用之间记住它的值。这意味着它在应用程序的生命周期中仅被分配

在此代码中,numberFormatter变量似乎是应用程序在其整个生命周期内随时可能需要的东西 - 因此不需要释放它。 更准确地说,如果应用程序经常需要它,则释放它可能是不切实际的。这将导致不必要的内存分配和释放操作。

请注意,在应用程序不再运行后,操作系统会将所有内存由您的应用程序释放。 这样,分配给该变量的内存也将被释放。

如果此对象使用内存以外的资源,则需要进行显式清理,但如果不是,则不需要这样做。

答案 1 :(得分:2)

我认为它不会泄漏内存,因为numberFormatter变量是static,这意味着它只有一个副本,并且引用在函数调用之间保持不变。因为你唯一一次制作一个新的,如果还没有,你将只有一个副本。

答案 2 :(得分:1)

这段代码的意图似乎是分配numberFormatter一次并在程序的整个生命周期中保持活动状态。由于在关闭应用程序时会自动释放所有内存,因此在以这种方式使用时不必释放内存。尽管如此,释放您保留的每一块内存仍然是一种好习惯。

答案 3 :(得分:0)

此示例将泄露。你在这里保留一个......

numberFormatter = [[NSNumberFormatter alloc] init];

答案 4 :(得分:-1)

当您执行“alloc”时,如下所示:

numberFormatter = [[NSNumberFormatter alloc] init];

你必须“释放”这个物体,否则它会泄漏:

[numberFormatter release];