在几个示例代码中可以找到这个
static NSNumberFormatter *numberFormatter = nil;
if (numberFormatter == nil) {
numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:6];
}
该代码是否会产生内存泄漏?或者是否有一些内置的魔法,可以释放分配的内存?
此致
答案 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];