1
zjsxwc OP 苹果的 Swift 也居然是一样的设计,ARC “自动引用计数”,解决“循环引用”的途径也是 weak 与 unowned
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/automaticreferencecounting/#Resolving-Strong-Reference-Cycles-Between-Class-Instances Swift 里 unowned 与 weak 的区别只是: <短生命周期的对象> 里的某个属性 可以 unowned 一个 <长生命周期的对象>,但回过来想<短生命周期的对象>必然早于<长生命周期的对象>销毁,所以和 weak 没区别,但语义上程序员就得有义务在代码上手动地随时保证被 unowned 标记的属性不会为 nil 。 |
2
codehz 2023-05-03 19:55:37 +08:00
arc 并不是灵丹妙药,而且性能不一定比得上 gc 和手动内存管理,还有额外的空间占用(所有被跟踪的对象,总得有个地方来记录引用计数吧),也没“彻底”解决内存问题(比如手动 weak 可能会炸,但不写可能会漏)
性能问题举例一个最简单的地方,因为没有额外标注,arc 必然得保证线程安全性,也就是说,即使你只在一个线程中使用,也需要通过线程同步的手段去做,虽然锁的粒度很小,但是由此带来的 happens-before 的语义也会导致很多优化失效 |