是否需要在程序退出/关闭时释放对象?
换句话说,为了便于论证,我们假设您有一个关闭应用程序的按钮,但就在您关闭之前,您显示了一个图像,然后您关闭了应用程序。
您是否需要在关闭应用程序之前释放该 ImageView ?当程序退出时,内存会自动释放吗?或者如果您不释放它,内存会以某种方式保持“事件”状态吗?
我知道你“应该”发布它,我的问题是关于它的技术方面,以及幕后发生的事情。
最佳答案
没必要。但是,如果您正在使用 valgrind
或类似工具,您很快就会发现让所有内存悬空会让您陷入错误警告的泥潭。
在 Linux 方面,堆是使用 sbrk
系统调用增长的。这一次将整个处理器内存空间增加了一个大块(因此只需要一个 sbrk
就可以为许多 malloc
提供足够的空间)。当进程消失时,内核回收所有由 sbrk
分配的内存。这就是你安全的原因。内核还将关闭该进程打开的所有文件描述符。
可能会出现一些问题。如果您的进程在不合时宜的时刻fork
,任何打开的文件描述符都将被复制。我已经看到这表现为原始进程终止后神秘地挂起的 TCP 连接,这令人讨厌。此外,还有其他资源不在进程范围内,因此当进程终止时它们不会被回收。这包括共享内存段、临时文件、命名管道和 UNIX 套接字,可能还有许多其他 IPC 机制。
总而言之?内存力很好。文件描述符通常没问题。如果不清理,一些更深奥的 IPC 功能将被严重破坏。
关于objective-c - 真的需要在程序退出时释放对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/347338/