4内存管理

作者: 蜗牛你慢慢来 | 来源:发表于2019-07-29 17:43 被阅读0次

内存管理是管理对象声明周期并在不再需要它们的时候释放它们的编程规则。管理对象内存是一个性能问题;如果应用程序不释放不需要的对象,则其内存占用会增加,性能会受到影响。Cocoa 应用程序中的内存管理不使用垃圾收集,而是基于引用计数模型。当你创建或复制对象时,其保留计数为1。此后,其他对象可能表示对你的对象的所有权,这将增加其保留计数。对象的所有者也可以放弃其在该对象中的所有权,这将减少保留计数。当保留计数为零时,对象将被释放(销毁)。 为了帮助你进行内存管理,Objective-C为你提供了必须按照一组规则使用的方法和机制。

注意:在 OS X 中,你可以显示管理内存,也可以使用 Objective-C 的垃圾收集功能。垃圾收集在 iOS 中不可用。

内存管理规则

内存管理规则,有时也称为所有权策略,帮助你在 Objective-C 代码中显示地管理内存。

  • 你拥有通过为其分配内存或复制它而创建的任何对象。
    相关方法:alloc, allocWithZone:, copy, copyWithZone:, mutableCopy, mutableCopyWithZone:
  • 如果你不是一个对象的创建者,但希望确保这个对象保留在内存中供你使用,则可以对它表示所有权。
    相关方法:retain
  • 如果你拥有一个对象,不管是通过创建它还是你对它表示了所有权,当你不再需要它的时候都要负责释放它。
    相关方法:release, autorelease
  • 相反,如果你不是有某个对象的创建者,并且对该对象没有所有权,你就不能释放它。

如果你从程序中的其他地方接收到一个对象,通常保证它在接收它的方法或函数中保持有效。如果你希望它在该范围之外保持有效,你应该保留或复制它。如果试图释放一个已经被销毁的对象,则程序会崩溃。

内存管理方面

以下概念对于理解和正确管理对象内存至关重要:

  • 自动释放池。向对象发送 autorealase 将标记该对象推迟释放,当你希望释放的对象在当前作用域之外持久存在时,这很有用。自动释放对象将其放入自动释放池 (NSAutoreleasePool 的实例),该实例是为任意程序范围创建的。当程序执行退出该范围时,池中的对象将被释放。
  • 解除分配。当一个对象的保留计数下降到零时,运行时会在该对象的类销毁该对象之前调用该对象类的 dealloc 方法。类实现此方法以释放对象所拥有的任何资源,包括由其实例变量指向的对象。
  • 工厂方法。许多框架类定义类方法,为了方便起见,可以创建类的对象。这些返回的对象不能保证在接收方法的范围之外是有效的。

翻译源:

相关文章

  • 微内核 seL4 Untyped

    seL4的内存管理 在seL4中,除了少量静态内存属于内核,所有的物理内存都由用户态管理。在root task开始...

  • 4内存管理

    内存管理是管理对象声明周期并在不再需要它们的时候释放它们的编程规则。管理对象内存是一个性能问题;如果应用程序不释放...

  • Linux kernel之二内存管理之连续内存page fram

    1.固定长度的物理内存管理技术-page frame 管理 用4KB page frame 作为基本的内存管理单元...

  • 内存管理

    内存管理语义http://www.jianshu.com/p/c579cf4b53f7 ios内存管理语义 ass...

  • python 内存管理,内存泄漏

    内存管理机制 Python的内存管理内存总共分为4层(Layer0-3): 第一层Layer1的仅仅是对mallo...

  • 4物理内存管理:非连续内存管理

    6.1非连续内存分配的需求背景 用户想要一块区域,而在内存当中又没有满足这个大小的连续区域,那这个分配就会失败,基...

  • Netty内存模型-PoolChunk

    1概述 从netty 4开始,netty加入了内存池管理,采用内存池管理比普通的new ByteBuf性能提高了数...

  • 面试题难点底层逻辑

    目录 1.多线程管理2.RunLoop3.Runtime4.内存管理5.性能(内存)优化举例6.App 编译与启动...

  • 内存管理

    1. 内存管理. 2. 内存中的五大区域. 3. 存储在在堆中的OC对象. 4. 内存管理的范围: 5. 对象什么...

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

网友评论

    本文标题:4内存管理

    本文链接:https://www.haomeiwen.com/subject/cgkirctx.html