【iOS】weak底层实现原理

问:当weak指向的对象被释放时,如何让weak指针置为nil的呢?

1、调用objc_release
2、因为对象的引用计数为0,所以执行dealloc
3、在dealloc中,调用了_objc_rootDealloc函数
4、在_objc_rootDealloc中,调用了object_dispose函数
5、调用objc_destructInstance
6、最后调用objc_clear_deallocating,详细过程如下:

  • a. 从weak表中获取废弃对象的地址为键值的记录
  • b. 将包含在记录中的所有附有 weak修饰符变量的地址,赋值为 nil
  • c. 将weak表中该记录删除
  • d. 从引用计数表中删除废弃对象的地址为键值的记录

转载地址:
weak底层实现原理

你可能感兴趣的:(iOS进阶知识)