在iOS中如何自由记忆?

当你做一个释放,你不会立即删除内存。 我使用这个代码 ,我可以看到使用释放之前和之后的内存,它不会改变。 好的,一段时间后会被释放。

但是,在启动一个使用大量内存的库之前,我可以做些什么来释放所有内存? 或者我该如何立即释放内存?

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

“每个对象都有一个”保留计数“,通过调用”保留“来增加,通过调用”释放“来减less。一旦保留计数达到0,对象被释放,内存可以用于其他事情。

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

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

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

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

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

这里是链接到这个信息的线程

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

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

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

要理解这一切,你需要学习一些操作系统如何处理内存分配,虚拟内存等。