objective-c - 真的需要在程序退出时释放对象吗?

标签 objective-c cocoa cocoa-touch

是否需要在程序退出/关闭时释放对象?

换句话说,为了便于论证,我们假设您有一个关闭应用程序的按钮,但就在您关闭之前,您显示了一个图像,然后您关闭了应用程序。

您是否需要在关闭应用程序之前释放该 ImageView ?当程序退出时,内存会自动释放吗?或者如果您不释放它,内存会以某种方式保持“事件”状态吗?

我知道你“应该”发布它,我的问题是关于它的技术方面,以及幕后发生的事情。

最佳答案

没必要。但是,如果您正在使用 valgrind 或类似工具,您很快就会发现让所有内存悬空会让您陷入错误警告的泥潭。

在 Linux 方面,堆是使用 sbrk 系统调用增长的。这一次将整个处理器内存空间增加了一个大块(因此只需要一个 sbrk 就可以为许多 malloc 提供足够的空间)。当进程消失时,内核回收所有由 sbrk 分配的内存。这就是你安全的原因。内核还将关闭该进程打开的所有文件描述符。

可能会出现一些问题。如果您的进程在不合时宜的时刻fork,任何打开的文件描述符都将被复制。我已经看到这表现为原始进程终止后神秘地挂起的 TCP 连接,这令人讨厌。此外,还有其他资源不在进程范围内,因此当进程终止时它们不会被回收。这包括共享内存段、临时文件、命名管道和 UNIX 套接字,可能还有许多其他 IPC 机制。

总而言之?内存力很好。文件描述符通常没问题。如果不清理,一些更深奥的 IPC 功能将被严重破坏。

关于objective-c - 真的需要在程序退出时释放对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/347338/

相关文章:

cocoa - 在 mousedown 方法中创建 NSRect 值的数组

ios - 使用Interface Builder在iOS中一页页面上的视差标题

ios - 在手势期间切换对象(拖放)

ios - 以编程方式按下 UIButton 时更改 UIImageView 中的图像

objective-c - ObjCMongoDB 坏了?我无法让它工作

cocoa - 多个核心动画视口(viewport)

objective-c - CALayerDelegate displayLayer 和 NSView updateLayer 有什么区别

ios - 创建保持在顶部的叠加 View 的好方法是什么?

ios - UICollectionView 与节标题像 UITableView

ios - 在 iOS 应用程序中添加上下文帮助