所以我已经知道 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/