码迷,mamicode.com
首页 > 其他好文 > 详细

objc_clear_deallocating 与弱引用

时间:2018-02-01 23:14:00      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:return   原理   添加   try   import   www.   tin   void   move   

 

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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

objc_clear_deallocating 与弱引用

标签:return   原理   添加   try   import   www.   tin   void   move   

原文地址:https://www.cnblogs.com/feng9exe/p/8401362.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!