Swift ARC自动引用计数
Swift ARC自动引用计数

Swift ARC自动引用计数

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/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注