ARC 全称是:Automatic Reference Counting(自动引用计数)。
它是 Swift 和 Objective-C 用来管理内存的一种机制,核心目的是:自动追踪和管理对象的生命周期,不用手动分配和释放内存,同时尽可能避免内存泄漏或悬空引用。
基本原理
每个对象在内存中都有一个“引用计数”,
有多少变量引用它,它的引用计数就是多少;
当引用计数变为 0,ARC 自动释放这个对象的内存。

使用示例
class Person {
let name: String
init(name: String) { self.name = name }
deinit { print("\(name) 被释放了") }
}
var person1: Person? = Person(name: "Tom")
var person2 = person1
person1 = nil // 引用计数减 1(还有 person2)
person2 = nil // 引用计数变为 0,Tom 被释放
当person1和person2都为nil时,class会调用deinit取消初始化方法,并输出:
Tom 被释放了
ARC常用关键词
1、strong:默认的引用,增加引用计数;
2、weak:弱引用,不增加引用计数,对象释放后自动变为 ni;
3、unowned:非拥有引用,不增加引用计数,对象释放后访问会崩溃(悬空引用)。
注意事项
1、使用 weak 的场景:代理 delegate、避免闭包内循环引用和监听对象生命周期(比如窗口销毁)。
2、unowned 使用不当就会崩溃:
unowned var person: Person
// 如果 person 已被释放,再访问就崩溃(悬空指针)
总结
ARC是自动引用计数,自动管理内存,如果有变量引用则保留,当没有变量引用时,就会释放对应的内存。
常用三种引用形式:
strong强应用,增加计数,默认引用;
weak弱引用,不增加计数,内存被释放时自动变为nil;
unowned非拥有引用,不增加计数,内存被释放时不会变为nil,会导致崩溃。
引用的作用为避免内存泄漏和悬空引用。
相关文章
1、Swift和Objective-C用于内存管理优化机制autoreleasepool:https://fangjunyu.com/2025/05/27/swift%e5%92%8cobjective-c%e7%94%a8%e4%ba%8e%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%e4%bc%98%e5%8c%96%e6%9c%ba%e5%88%b6autoreleasepool/
2、Swift深入理解闭包捕获机制:https://fangjunyu.com/2024/11/28/swift%e6%b7%b1%e5%85%a5%e7%90%86%e8%a7%a3%e9%97%ad%e5%8c%85%e6%8d%95%e8%8e%b7%e6%9c%ba%e5%88%b6/