美文网首页
【iOS-内存管理】

【iOS-内存管理】

作者: GeniusWong | 来源:发表于2018-09-26 01:50 被阅读10次
  • 在iOS使用引用计数来管理OC对象的内存
  • 一个新创建的OC对象的引用计数是1,当引用计数减为0,OC对象就会销毁,释放其占用的内存空间
  • 调用retain会让OC对象的引用计数+1,调用release会让OC对象的引用计数-1
  • 当调用 alloc new copy mutableCopy方法返回了一个对象,在不需要这个对象的时候,要调用 release``autorelease 释放它
  • 想拥有某个对象,就让它的引用计数+1;不想再拥有某个对象,就让它的引用计数-1

copy和mutableCopy

copy mutableCopy
NSString NSString浅拷贝 mutableCopy深拷贝
NSSMutableString NSString深拷贝 mutableCopy深拷贝
NSArray 同上 同上
NSMutableArray 同上 同上
NSDictionary 同上 同上
NSMutableDictionary 同上 同上

引用计数的存储

  • 在64bit中,引用计数可以直接存储在优化过的isa指针中,也可能存储在SideTable类中
    // refcnts是一个存放着对象引用计数的散列表
struct SideTable {
    spinlock_t slock;
    RefcountMap refcnts;
    weak_table_t weak_table;
}

dealloc

  • 当一个对象要释放时,会自动调用 dealloc,调用轨迹:
dealloc
_objc_rootDealloc
rootDealloc
object_dispose
objc_destructInstance
free

void *objc_destructInstance(id obj) 
{
    if (obj) {
        // Read all of the flags at once for performance.
        bool cxx = obj->hasCxxDtor();
        bool assoc = obj->hasAssociatedObjects();

        // This order is important.
        if (cxx) object_cxxDestruct(obj);// 清除成员变量
        if (assoc) _object_remove_assocations(obj);
        obj->clearDeallocating();// 指向当前对象的弱指针置为nil
    }

    return obj;
}

自动释放池

相关文章

  • iOS-归纳

    iOS内存分区,堆区 栈区等 内存管理 属性关键字、内存分区总结 iOS- 数据存储iOS开发数据库-FMDBiO...

  • iOS-内存管理分析(中)

    前言 iOS-内存管理分析(上)[https://www.jianshu.com/p/312a7e85aa85]一...

  • iOS-内存管理分析(下)

    前言 iOS-内存管理分析(上)[https://www.jianshu.com/p/312a7e85aa85]以...

  • 【iOS-内存管理】

    在iOS使用引用计数来管理OC对象的内存 一个新创建的OC对象的引用计数是1,当引用计数减为0,OC对象就会销毁,...

  • iOS-内存管理

    简述内存管理基本原则 之前:OC内存管理遵循“谁创建,谁释放,谁引用,谁管理”的机制,当创建或引用一个对象的时候,...

  • iOS-内存管理

    面试题 使用CADisplayLink、NSTimer有什么注意点? 介绍下内存的几大区域 讲一下你对 iOS 内...

  • iOS-内存管理

    前言 说到iOS的内存管理,大致应该分为以下几个方面: NSTaggedPointer 类型 alloc,reta...

  • IOS-内存管理

    内存布局 IOS的内存布局除了我们知道的内存五大区,还有内核区和保留区,我们知道虚拟内存分配了4GB的空间,前面3...

  • iOS-内存管理

    MRC 遵循谁申请,谁添加,谁就要去释放,需要手动的去管理内存的添加,释放 ARC 当你申请,添加对象后系统会帮你...

  • iOS-内存管理

    一.内存的五大区 栈区:编译器自动分配并释放,存放函数的参数值、局部变量、基本类型的变量或对象引用类型 堆区:由程...

网友评论

      本文标题:【iOS-内存管理】

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