zoukankan      html  css  js  c++  java
  • objc_clear_deallocating 与弱引用

    void *objc_destructInstance(id obj)
    {
    if (obj) {
    Class isa_gen = _object_getClass(obj);
    class_t *isa = newcls(isa_gen);

    // Read all of the flags at once for performance.
    bool cxx = hasCxxStructors(isa);
    bool assoc = !UseGC && _class_instancesHaveAssociatedObjects(isa_gen);

    // This order is important.
    if (cxx) object_cxxDestruct(obj);
    if (assoc) _object_remove_assocations(obj);

    if (!UseGC) objc_clear_deallocating(obj);
    }

    return obj;
    }

     

     

    weak 实现原理的概括

    Runtime维护了一个weak表,用于存储指向某个对象的所有weak指针。weak表其实是一个hash(哈希)表,Key是所指对象的地址,Value是weak指针的地址(这个地址的值是所指对象指针的地址)数组。

    weak 的实现原理可以概括一下三步:

    1、初始化时:runtime会调用objc_initWeak函数,初始化一个新的weak指针指向对象的地址。
    2、添加引用时:objc_initWeak函数会调用 objc_storeWeak() 函数, objc_storeWeak() 的作用是更新指针指向,创建对应的弱引用表。
    3、释放时,调用clearDeallocating函数。clearDeallocating函数首先根据对象地址获取所有weak指针地址的数组,然后遍历这个数组把其中的数据设为nil,最后把这个entry从weak表中删除,最后清理对象的记录。



    作者:此生逍遥
    链接:https://www.jianshu.com/p/13c4fb1cedea
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    androidimage: load large bitmap Efficiently
    display log information in terminal
    黑客人物介绍
    Linux 基础入门学习
    网络攻防 第四周学习总结
    网络攻防 第二周学习总结
    网络攻防 第三周学习总结
    SpringBoot入门Demo(Hello Word Boot)
    jquery的json对象与字符串之间转换
    Intellij IDEA导入web项目详解(解决访问的404)
  • 原文地址:https://www.cnblogs.com/feng9exe/p/8401362.html
Copyright © 2011-2022 走看看