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

时间:2012-01-14 02:24:34

标签: objective-c automatic-ref-counting

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

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

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

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

2 个答案:

答案 0 :(得分:18)

这里解释了:

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

扰流:

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

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

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

答案 1 :(得分:2)

在运行时由全局哈希表实现。 Apple来源:https://opensource.apple.com/source/objc4/objc4-647/runtime/objc-weak.mm