知识卡片
ARC用引用计数取代垃圾回收
内容
Swift的类实例内存管理既不是C那样完全手动,也不是Java/Go那样靠运行时垃圾回收器周期性扫描,而是自动引用计数(ARC):编译器在编译期分析代码,在每处强引用建立/消失的地方自动插入”引用计数加一/减一”的调用,计数归零时实例立即被释放(deinit随即执行)。这个选择的好处是内存释放时机确定、可预测(不像GC那样”某个时刻会被回收”),且没有GC暂停带来的性能抖动,适合iOS这类对内存和流畅度都敏感的场景;代价是无法自动检测和打破”两个实例互相强引用对方”的循环——计数永远不会降到0,内存永久泄漏,需要开发者主动识别并用weak或unowned打破循环,这是纯手动内存管理和纯GC都不会遇到的一类特有问题。
参考来源
《Swift编程权威指南》第24章《内存管理和ARC》