30天学会Swift-18:内存管理-ARC

Swift中ARC内存管理与循环强引用解决

学习目标

  • 理解Swift中自动引用计数(ARC)的基本原理。
  • 掌握ARC如何管理内存,包括引用计数的工作方式。
  • 学习如何识别和解决循环强引用(Strong Reference Cycles)。
  • 掌握weakunowned关键字的使用场景和区别。
  • 了解闭包中的循环强引用以及如何解决。

学习内容

1. 自动引用计数 (ARC) 简介

Swift 使用自动引用计数(Automatic Reference Counting, ARC)来管理应用程序的内存使用。ARC 会自动跟踪和管理你的应用程序所使用的内存,当不再需要某个类的实例时,ARC 会自动释放其占用的内存。

  • 工作原理:当每次创建一个新的类实例时,ARC 会分配一块内存来存储该实例的信息。当实例不再被需要时,ARC 会释放其占用的内存。为了判断一个实例是否仍然被需要,ARC 会跟踪有多少个强引用指向该实例。当一个实例的强引用计数变为零时,ARC 就会销毁该实例并回收其内存。

2. ARC 的工作方式

  • 强引用 (Strong References):默认情况下,当你将一个类实例赋值给一个常量或变量时,这个常量或变量就会对该实例创建一个强引用。只要存在一个或多个强引用,ARC 就不会销毁该实例。

  • 示例

    class Person {
         
         
        let name: String
        init(name: String) {
         
         
            self.name = name
            print("\(name) is being initialized")
        }
        deinit {
         
         
            print("\(name) is being deinitialized")
        }
    }
    
    var reference1: Person?
    var reference2: Person?
    var reference3: Person?
    
    reference1 = Person(name: "John Appleseed") // 引用计数为 1
    // 输出: John Appleseed is being initialized
    
    reference2 = reference1 // 引用计数为 2
    reference3 = reference1 // 引用计数为 3
    
    reference1 = nil // 引用计数为 2
    reference2 = nil // 引用计数为 1
    reference3 = nil // 引用计数为 0,实例被销毁
    // 输出: John Appleseed is being deinitialized
    

3. 循环强引用 (Strong Reference Cycles)

当两个或多个类实例相互持有对方的强引用时,就会发生循环强引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明似水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值