被释放的对象程序退出真的需要?

问题描述 投票:14回答:4

被释放在程序退出的对象/关闭需要的?

换句话说,我们可以说为参数的缘故,你有一个按钮,关闭应用程序,但你收权,然后显示一个图像,然后关闭应用程序。

你需要释放图像视图关闭应用程序之前?会当程序退出,或者如果你不松开,将内存留在某种程度上“活跃”内存会自动释放?

据我所知,你“应该”放开,我的问题是关于它的技术方面,以及在幕后发生了什么。

objective-c cocoa cocoa-touch
4个回答
27
投票

这不是必需的。但是,如果你正在使用valgrind或类似的工具,你很快就会发现,离开你所有的记忆晃来晃去的假警告沼泽你。

对事物的Linux方面,堆使用sbrk系统调用增长。这在时间(因此只需要一个sbrk提供许多mallocs足够的空间)通过生长大的块整体处理器的存储器空间。当程序转到走,内核收回全部由sbrk分配的内存中。这就是为什么你是安全的。内核还将关闭一个进程打开的文件描述符。

有迹象表明,可以拿出一些问题。如果你曾经进程在不合时宜的时刻forks,任何打开的文件描述符将被复制。我已经看到了这表现为一个TCP连接神秘吊活后原工艺死了,这是肮脏的。此外,还有一些只是无法处理范围的其他资源,所以当进程死掉,他们将不会被回收。这包括共享内存段,临时文件,命名管道和UNIX插座,以及可能的其他IPC机制摆。

综上所述?内存是罚款。文件描述符通常是罚款。一些更深奥的IPC功能将如不清理被打破可怕。


4
投票

在iPhone上,你并不需要,而据我所知,你不能。接收applicationWillTerminate后:你有几秒钟,以保存状态,然后OS杀死你的进程。构建示例应用程序之一,并把一个断点的dealloc的方法之一。他们从来没有得到击中。

下面是关于它的巨大争论:link text

注意:目标C dealloc的是不一样的事,作为一个C ++拆解。在拆解可以关闭文件,拉手等在Objective C中的dealloc只是释放内存。你必须从前面的dealloc可能永远不会得到所谓闭上你的其他资源。


1
投票

事实上,这是没有必要的,但如果你可能想someof回收源,并在另一个程序使用,你可能会得到内存泄漏。除此之外,从不考虑OS是没有任何过错。它可以“忘记”释放一些资源。


0
投票

释放可以帮助你发现漏洞。更多的往往不是动态内存问题在发布时触发(例如,你试图释放一个无效的对象)。始终释放可以帮助您识别错误,否则将很难找到。

© www.soinside.com 2019 - 2024. All rights reserved.