• Swift中的strong, weak, unowned


    在 Swift 中,strong, weak, 和 unowned 关键词用于管理内存中对象的引用。这些关键词与 Swift 的自动引用计数(ARC)系统紧密相关,用于防止内存泄漏和强引用循环。下面是对这三种引用类型的简要说明:

    1. Strong

    • 默认行为:在 Swift 中,所有类的实例引用默认都是 strong。
    • 用途:strong 引用确保所引用的对象不会被销毁,只要至少有一个 strong 引用指向该对象,它就会保持在内存中。
    • 注意:过多的 strong 引用(特别是在闭包或者两个对象间相互引用时)可能导致强引用循环,进而导致内存泄漏。

    2. Weak

    • 非拥有引用:weak 引用是一种非拥有引用,当其他 strong 引用都释放后,weak 引用所指向的对象会被销毁。
    • 自动置空:当所引用的对象被销毁时,weak 引用会自动变成 nil。
    • 用途:主要用于防止强引用循环,特别是在父子关系或委托(delegate)关系中。
      类型限制:只能用于可选类型(Optional 类型)。

    3. Unowned

    • 非拥有引用:unowned 引用同样是一种非拥有引用。

    • 不自动置空:与 weak 引用不同,当所引用的对象被销毁时,unowned 引用不会自动变成 nil。因此,在对象被销毁后继续使用 unowned 引用将触发运行时错误。

    • 用途:主要用于防止强引用循环,适用于引用始终指向未销毁的对象的场景。

    • 类型限制:可以用于非可选类型。

    • 选择 weak 还是 unowned
      选择 weak 还是 unowned 主要取决于引用的对象是否有可能在引用期间被销毁。如果是,应该使用 weak。如果引用的对象一直存在直到引用本身不再使用时,可以使用 unowned。

    在实际开发中,正确地使用这三种引用类型对于管理内存和防止内存泄漏非常重要。特别是在处理闭包和创建复杂的类实例关系时,合理的引用类型选择是必须的。

  • 相关阅读:
    通过stream流实现分页、模糊搜索、按列过滤功能
    计算机网络的体系结构
    异硫氰酸荧光素FITC标记二氧化钛纳米粒纳米颗粒CY7-Se-PEG-TiO2(定制服务)
    Redis分布式锁实现
    golang bufio解析
    【ES6】js 中class的extends、super关键字用法和避坑点
    elastisearch开发时的发现
    伪数据--学习笔记
    技术管理进阶——第三个五年,独立思考与落地实操
    八、Vue3基础之八
  • 原文地址:https://blog.csdn.net/u013538542/article/details/134400318