我正在研究ARC。而现在关于弱指针归零。 好的我了解所有功能。 弱引用的语义与GC系统的弱引用相同,但是你知道,Objective-C不使用GC(特殊情况除外),所以我无法理解它是如何工作的。< / p>
我是一个有点复杂的人,所以我需要知道底层实现主体才能接受要使用的功能。但问题是很难找到描述归零弱指针原理的文档:(
IMO,实现这项工作的唯一方法是跟踪并保持所有指针在运行时引用自身,并在其引用计数变为nil
时将它们全部设置为0
。但这看起来太沉重和愚蠢。我相信在实际的ARC实现中使用了更好的解决方案。
你能帮我找到文件吗?或直接描述会更棒!
答案 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