iOS-内存管理

作者: MMD_ | 来源:发表于2018-01-31 22:45 被阅读7次

    简述内存管理基本原则

    之前:OC内存管理遵循“谁创建,谁释放,谁引用,谁管理”的机制,当创建或引用一个对象的时候,需要向她发送alloc、copy、retain消息,当释放该对象时需要发送release消息,当对象引用计数为0时,系统将释放该对象,这是OC的手动管理机制(MRC)。目前:iOS 5.0之后引用自动管理机制——自动引用计数(ARC),管理机制与手动机制一样,只是不再需要调用retain、release、autorelease;它编译时的特性,当你使用ARC时,在适当位置插入release和autorelease;它引用strong和weak关键字,strong修饰的指针变量指向对象时,当指针指向新值或者指针不复存在,相关联的对象就会自动释放,而weak修饰的指针变量指向对象,当对象的拥有者指向新值或者不存在时weak修饰的指针会自动置为nil。

    内存管理的范围

    任何继承自NSObject的对象都需要管理内存(因存放在堆里面),基本数据类型int、float、double、char、结构体struct以及枚举enum都不需要管理内存(因存放在栈里面)

    • 堆: 一般由程序员分配释放内存,若程序员不释放,程序结束时可能由OS释放,其操作方式类似于数据结构中的链表
    • 栈: 由操作系统自动分配释放,存放函数的参数值,局部变量值等,其操作方式类似于数据结构中的栈(先进后出)

    内存管理的概念

    定义:高效快速的管理内存,在适当的时候回收和释放内存资源
    MRC中, 使用"引用计数机制", 需要手动管理内存
    ARC中, 使用"强弱引用机制", 系统自动在合适的地方加上retain,release.
    常见的引起内存泄漏的原因:
    循环引用
    大循环

    内存管理的几个原则是什么?

    谁创建,谁释放,谁引用,谁管理
    在MRC中,一次retain必须对应一次release消息
    在ARC中强弱引用(注意strong / weak关键字)
    当strong修饰的指针指向新值或者不复存在时,其相关联的对象会自动释放
    当weak修饰的对象,其拥有者指向新值或者不复存在时,weak修饰的对象会自动置为nil

    https://juejin.im/post/59da33666fb9a00a496e955c

    相关文章

      网友评论

        本文标题:iOS-内存管理

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