__weak如何实现对象值自动设置为nil的

详情请查看:http://blog.csdn.net/hherima/article/details/38661803

总结如下:

weak的功能:

* 若使用__weak修饰符的变量引用对象被废弃时,则将nil赋值给该变量

* 使用附有__weak修饰符的变量,就是使用注册到autoreleasepool的对象

ARC对象释放的过程:

1. objc_release

2. 因为引用计数为0所以执行dealloc

3. _objc_rootDealloc

4. object_dispose

5. objc_destructInstance

6. objc_clear_deallocating

而,调用objc_clear_deallocating的动作如下:

1. 从weak表中获取废弃对象的地址为键值的记录。

2. 将包含在记录中的所有附有__weak修饰符变量的地址,赋值为nil

3. 从weak表中删除记录

4. 从引用计数表中删除废弃对象的地址作为键值的记录

你可能感兴趣的:(__weak如何实现对象值自动设置为nil的)