被释放在程序退出的对象/关闭需要的?
换句话说,我们可以说为参数的缘故,你有一个按钮,关闭应用程序,但你收权,然后显示一个图像,然后关闭应用程序。
你需要释放图像视图关闭应用程序之前?会当程序退出,或者如果你不松开,将内存留在某种程度上“活跃”内存会自动释放?
据我所知,你“应该”放开,我的问题是关于它的技术方面,以及在幕后发生了什么。
这不是必需的。但是,如果你正在使用valgrind
或类似的工具,你很快就会发现,离开你所有的记忆晃来晃去的假警告沼泽你。
对事物的Linux方面,堆使用sbrk
系统调用增长。这在时间(因此只需要一个sbrk
提供许多malloc
s足够的空间)通过生长大的块整体处理器的存储器空间。当程序转到走,内核收回全部由sbrk
分配的内存中。这就是为什么你是安全的。内核还将关闭一个进程打开的文件描述符。
有迹象表明,可以拿出一些问题。如果你曾经进程在不合时宜的时刻fork
s,任何打开的文件描述符将被复制。我已经看到了这表现为一个TCP连接神秘吊活后原工艺死了,这是肮脏的。此外,还有一些只是无法处理范围的其他资源,所以当进程死掉,他们将不会被回收。这包括共享内存段,临时文件,命名管道和UNIX插座,以及可能的其他IPC机制摆。
综上所述?内存是罚款。文件描述符通常是罚款。一些更深奥的IPC功能将如不清理被打破可怕。
在iPhone上,你并不需要,而据我所知,你不能。接收applicationWillTerminate后:你有几秒钟,以保存状态,然后OS杀死你的进程。构建示例应用程序之一,并把一个断点的dealloc的方法之一。他们从来没有得到击中。
下面是关于它的巨大争论:link text
注意:目标C dealloc的是不一样的事,作为一个C ++拆解。在拆解可以关闭文件,拉手等在Objective C中的dealloc只是释放内存。你必须从前面的dealloc可能永远不会得到所谓闭上你的其他资源。
事实上,这是没有必要的,但如果你可能想someof回收源,并在另一个程序使用,你可能会得到内存泄漏。除此之外,从不考虑OS是没有任何过错。它可以“忘记”释放一些资源。
释放可以帮助你发现漏洞。更多的往往不是动态内存问题在发布时触发(例如,你试图释放一个无效的对象)。始终释放可以帮助您识别错误,否则将很难找到。