美文网首页
内存管理

内存管理

作者: 小谨哥哥 | 来源:发表于2016-12-15 19:48 被阅读7次

应用程序在其生命周期中会创建很多对像,这些对象都相互联系着,这些相互关联的对象就构成了一张”对象图“,对象如果持有指向其他对象的强引用,那么前者就拥有会者。

对象所占用的内存在解除分配之后,只是放回可用内存池,如果执行时尚未复写对象内存,那么该对象扔然有效。

调用release会立刻递减对象的保留计数而且还有可能令系统回收此对象,然而有时候可以不调用他,改为调用autorelease,此方法会在稍后递减计数。

autorelease能延长对象生命期,使其在跨越方法调用边界后依然可以存活一段时间。

引用计数机制通过可以递增递减的计数器来管理内存,对象创建好之后,其保留计数至少为1,若保留计数为正,则对象继续存活,当保留计数降为0时,对象就销毁了。

clang编译器项目带有一个"静态分析器",用于致命程序里引用计数出问题的地方。

ARC管理对象生命周期的办法基本就是:在合适的地方插入”保留“及”释放“操作,在ARC环境下,变量的内存管理语义可以通过修饰符指明,而原来则需要手工执行保留和释放操作。

ARC只负责oc对象的内存,corefoundation管不了。

在dealloc方法里,应该做的事情就是释放指向其他对象的引用,并取消原来订阅的通知,不要做其他任何事。

如果对象持有文件描述符等系统资源,那么应该专门编写一个方法来释放此种资源,这样的类要和其他使用者约定,用完资源后必须调用close方法。

执行异步任务的方法不应该在dealloc里调用。只能在正常状态下执行的那些方法也不应该在dealloc里调用。因为此时对象已经处于正在回收的状态里。

捕获代码时,一定要注意将try块内所创立的对象清理干净。

在默认情况下。arc不生成安全处理异常所需要的清理代码,开启编译器标志后,可生成这种代码,不过会导致应用程序变大,而且会降低运行效率。

将某些引用设为weak,可以避免出现保留环

unsafe_unretained 与weak属性,再起所指的对象回收以后表现出来的行为不同,unsafe_unretained属性扔然指向那个已经回收的实例,而weak属性则指向nil。

自动释放池排布在栈中。对象收到autorelease消息后。系统将其放入最顶端的池里

开启僵尸对象方法:编辑应用程序scheme,在对话框左侧选择run,然后切换至diagnostics,勾选enable zombie objects。

- (void)setFoo:(id)foo{

[foo retail];

[_foo release];

_foo = foo;

}

strong 类型指针。此方法将保留新值并释放旧值,然后更新实例变量,另其指向新值,加入还未保留新值就是放旧值,而且两个值又指向同一个对象,那么先执行release操作就可能导致系统将此对象永久回收,

相关文章

  • iOS内存管理详解

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

  • 第10章 内存管理和文件操作

    1 内存管理 1.1 内存管理基础 标准内存管理函数堆管理函数虚拟内存管理函数内存映射文件函数 GlobalMem...

  • 操作系统之内存管理

    内存管理 包括内存管理和虚拟内存管理 内存管理包括内存管理概念、交换与覆盖、连续分配管理方式和非连续分配管理方式(...

  • JavaScript —— 内存管理及垃圾回收

    目录 JavaScript内存管理内存为什么需要管理?内存管理概念JavaScript中的内存管理JavaScri...

  • OC - OC的内存管理机制

    导读 一、为什么要进行内存管理 二、内存管理机制 三、内存管理原则 四、MRC手动内存管理 五、ARC自动内存管理...

  • 3. 内存管理

    内存管理 内存管理包含: 物理内存管理; 虚拟内存管理; 两者的映射 除了内存管理模块, 其他都使用虚拟地址(包括...

  • Go语言——内存管理

    Go语言——内存管理 参考: 图解 TCMalloc Golang 内存管理 Go 内存管理 问题 内存碎片:避免...

  • jvm 基础第一节: jvm数据区

    程序内存管理分为手动内存管理和自动内存管理, 而java属于自动内存管理,因此jvm的职能之一就是程序内存管理 j...

  • 内存管理

    内存管理的重要性。 不进行内存管理和错误的内存管理会造成以下问题。 内存泄露 悬挂指针 OC内存模型 内存管理是通...

  • 11-AutoreleasePool实现原理上

    我们都知道iOS的内存管理分为手动内存管理(MRC)和自动内存管理(ARC),但是不管是手动内存管理还是自动内存管...

网友评论

      本文标题:内存管理

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