iOS 中weak的实现原理和销毁


A.weak的实现原理?

 初始化时:runtime 会调用objc_initWeak函数,初始化一个新的weak指针指向对象的地址

 (首先会查看对象实例是否有效 无效对象直接导致指针释放 else如下)

 添加引用:objc_initWeak函数会调用 objc_storeWeak() 函数, objc_storeWeak() 的作用是更新指针指向,创建对应的弱引用表

 weak表其实就是一个哈希表,key是所对象的指针,value的weak指针的地址(这个地址的值是所指向对象的地址)数组。



B.weak销毁原理

因为weak的引用计数为0 ,所以会执行dealloc把weak置为nil。

调用了_objc_rootDealloc函数

 在_objc_rootDealloc中,调用了object_dispose函数

 调用objc_destructInstance

 最后调用objc_clear_deallocating

 调用 clearDeallocating 函数,clearDeallocating 函数首先根据对象地址获取所有 weak 指针地址的数组,然后遍历这个数组把其中的数据设为 nil,最后把这个 entry 从 weak 表中删除,最后清理对象的记录

推荐文章

你可能感兴趣的:(iOS 中weak的实现原理和销毁)