c# - 内存管理——C# VS Objective C?

标签 c# objective-c memory-management

所以我已经知道 Objective-C 中的内存管理,而且在 .net (C#) 中编程时我从来不需要知道它。但我仍然对一切是如何完成的有一些疑问。

-如果我们分配一个对象而不释放它,为什么代码会在 objective-c 中泄漏?

-为什么这在 C# 中没有泄漏?

-自动垃圾收集有哪些优点和缺点?

-为什么不对每个分配的对象使用自动释放( Objective-C )?

-是否可以手动处理内存 (C#)?假设我实例化了一个对象,当我完成后我想释放它,我不想等待垃圾收集器来完成它?

最佳答案

  • 它在 Objective-C 中泄漏,因为 Objective-C 没有对其采取任何操作。它依赖于您完成所有工作。它不会在 C# 中(更准确地说,在 .NET 中)泄漏,因为它使用了一个垃圾收集器来清理不再使用的对象。

  • 垃圾回收的主要优点如下:内存泄漏少得多。 (仍然有可能发生内存泄漏,例如无限期地填充一个列表,但意外更难发生。)过去人们认为垃圾收集有一个缺点,它可能会减慢程序,因为它一直在做垃圾在后台收集,您几乎无法控制它。然而,实际上,差异可以忽略不计:您的计算机上还有其他后台任务(例如设备驱动程序)一直在运行,垃圾收集器也不会折断 Camel 。

  • 自动解除分配(当非指针变量超出范围时在 C++ 中使用它)是危险的,因为即使在对象被释放后,它仍然存在对它的引用的可能性.如果您的代码随后尝试访问该对象,则该过程会很顺利。

  • 是的,可以通过直接调用垃圾收集器 (GC.Collect()) 告诉 C# 释放内存。但是,我还没有看到有必要这样做的情况。如果您确实用完了内存,垃圾收集器将自动启动并尽可能多地释放内存。

关于c# - 内存管理——C# VS Objective C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3673401/

相关文章:

c# - 这是 MiscUtils 中的错误吗?

c# - 从 C# 检索 SQL Server 扩展属性

iOS 7 应用程序因内存压力而终止

c++ - 如何尝试读取未分配的内存

c# - 类实例的内存管理

c# - 执行 Microsoft Graph API 的 POST 请求以将成员添加到 AD 组

c# - 将线程添加到集合时处理 TPL 中的错误

objective-c - 如何释放我想要返回的值?

ios - XCode & Instruments,如何清除进程列表

linux - 如何在 Linux 中分配满足分页和缓存能力要求的内存?