Runtime 会维护一个weak表,用于维护指向对象的所有weak指针,weak 是一个hash表,其key为所指对象的指针,value为weak指针的地址数组.
具体过程如下:
1.初始化时:runtime 会调用 objc_initWeak 函数,初始化一个新的weak指针,指向对象的地址!!!,指向对象的地址!!!,指向对象的地址!!!.
2.添加引用时:objc_initWeak函数会调用objc_storeWeak函数,更新指针指向,创建对应的弱引用表.
3.释放时,调用clearDeallocating函数. clearDeallocation函数会根据对象地址获取所有的weak指针地址数组,然后遍历这个数组把其中的数据置为nil,最后把这个entry从weak表中删除,最后清理对象记录.