如何实现ARC的归零弱指针行为?

Eon*_*nil 12 objective-c automatic-ref-counting

我在学习ARC.而现在关于弱指针归零.好的我了解所有功能.弱引用的语义与GC系统的弱引用相同,但是你知道,Objective-C不使用GC(特殊情况除外),所以我无法理解它是如何工作的.

我是一个有点复杂的人,所以我需要知道底层实现原则才能接受要使用的功能.但问题是很难找到描述归零弱指针原理的文档:(

IMO,实现这项工作的唯一方法是跟踪并保持所有指针在运行时引用自身,并nil在其引用计数变为时将它们全部设置0.但这看起来太沉重和愚蠢.我相信在实际的ARC实现中使用了更好的解决方案.

你能帮我找到文件吗?或直接描述会更棒!

Nic*_*ood 19

它在这里解释:

http://mikeash.com/pyblog/friday-qa-2010-07-16-zeroing-weak-references-in-objective-c.html

扰流板:

它的工作方式与您的想法非常相似.每个类都维护一组指向它的弱指针的地址,并且当调用它的dealloc时,它将它们全部设置为零.

它可能看起来很愚蠢,但它很快,因为没有涉及"跟踪",ARC只是在每次将对象分配给新的弱引用时插入代码以添加指向该集的指针.

它实际上比垃圾收集中涉及的技巧更有效,它基本上涉及在后台线程上搜索堆,寻找指针并保持它们指向的内容.

  • 实际上,在ARC下,编译器会发出代码来调用`objc_storeWeak`和`objc_loadWeakRetain`等函数.这些函数是一个记录的API:http://clang.llvm.org/docs/AutomaticReferenceCounting.html#runtime (2认同)