如何在iOS中立即释放内存?

问题描述 投票:1回答:2

执行发布时,不会立即删除内存。我使用this code,我可以在使用发布之前和之后看到内存,它不会改变。好的,它会在一段时间后发布。

但是,在启动一个会占用大量内存的库之前,我能做些什么才能释放所有内存?或者我怎样才能立即释放内存?

objective-c ios memory-management
2个回答
4
投票

内存管理在iOS中是一件大事,但在我的开发过程中,这些信息对我帮助很大。

“每个对象都有一个”保留计数“,通过调用”retain“来增加,并通过调用”release“来减少。一旦保留计数达到0,对象就被释放,内存可以被用于其他东西。

您可以“自动释放”对象。这意味着保留计数不会立即减少,但会在下次当前自动释放池耗尽时减少。

iOS应用程序有一个运行代码的事件循环。在事件循环的每次迭代之后,自动释放池被耗尽。保留计数为0的任何对象都将被释放。

默认情况下,自动释放的对象由不以new,copy,mutableCopy,retain或init开头的方法返回。这意味着您可以立即使用它们,但如果您不保留它们,则对象将在运行循环的下一次迭代中消失。

如果您未能释放保留的对象但不再引用它们,那么您将有内存泄漏,这可以通过仪器中的泄漏工具检测到。

一种策略是自动释放上述命名方法返回的所有内容,并将对象存储在retain属性中(或复制字符串)。在对象的dealloc方法中,将所有属性设置为nil。将retain / copy属性设置为nil会释放它当前指向的对象。只要你没有任何循环引用(通过不使用诸如委托之类的“父”对象的保留属性来避免),你将永远不会遇到任何泄漏。“

这是该信息的线程链接

http://www.quora.com/What-is-the-best-way-to-understand-memory-management-in-iOS-development

这是一个很好的线程,包含一些有用的代码示例以及其他引用。


1
投票

Release立即释放内存(假设它是最后一个版本)。这意味着,分配时,您的应用程序可以再次使用它。请注意,每个应用程序都有一些由系统分配的空闲内存块(页面),并且在分配/解除分配页面的一部分时,释放的内存不会自动返回给系统。它只是标记为免费,可以由应用程序再次使用。

要理解这一切,您需要了解操作系统如何处理内存分配,虚拟内存等。

© www.soinside.com 2019 - 2024. All rights reserved.