当前位置: 首页 > news >正文

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。

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

相关文章:

Swift中的strong, weak, unowned

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

Linux命令——ssh

Linux命令——ssh 背景 SSH(Secure Shell 的缩写)是一种网络协议,用于加密两台计算机之间的通信,并且支持各种身份验证机制。 历史上,网络主机之间的通信是不加密的,属于明文通信。这使得通信很不安全&a…...

在qml中,text如何左对齐,对齐方式有哪些?如何换行?

在Qt Quick(即QML)中,你可以使用Text组件的horizontalAlignment属性来控制文本的对齐方式。以下是一些常用的对齐方式: Align.Left: 文本左对齐。这是默认的对齐方式。 Align.Center: 文本居中对齐。 Align.Right: 文本右对齐。 …...

【Rust 易学教程】第 1 天:Rust 基础,基本语法

上一节:【Rust 易学教程】学前准备:Cargo, 你好 今天,我们正式进入 Rust 基础的学习。在本文的内容中,我会为大家介绍以下内容: 基本 Rust 语法: 变量、标量和复合类型、枚举、结构、引用、函数和方法。控…...

Linux(命令)——结合实际场景的命令 查找Java安装位置命令

前言 在内卷的时代,作为开发的程序员也需要懂一些Linux相关命令。 本篇博客结合实际应用常见,记录Linux命令相关的使用,持续更新,希望对你有帮助。 目录 前言引出一、查找Java安装位置命令1、使用which命令2、使用find命令3、查…...

C语言基础 -- scanf函数的返回值及其应用

前言、scanf函数有返回值 我们在作PTA上的编程作业时,经常在编译窗口会看到如下的信息: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result] 当时老师一定会告诉你,这个一个&qu…...

mac 安装 selenium + chrome driver

前言 使用 selenium 模拟浏览器渲染数据,需要依赖各浏览器的驱动才能完成,因此需要单独安装chrome driver 查看本地 chrome 浏览器的版本 可以看到我这里已经是 arm 架构下最新的版本了 下载对应的 chrome driver 访问下面的地址: Chrome…...

【阿里云】函数计算 X 通义千问快速部署

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…...

el-table本地与线上的样式不一致出现错乱

使用el-table的时候有几个表头是循环出来的,出现在本地运行的时候,表头内el-input输入框样式正常,但是发布以后出现样式错乱问题 线上样式错乱:​ 本地正常: 出现这个问题的原因是我有几个表头是循环出来的&#xff0…...

C语言--从键盘输入当月利润I,求应发奖金总数。

题目描述: 企业发放的奖金根据利润提成。利润I低于或等于100000元的,奖金可提成10%; 利润高于100000 元,低于200000元(1000001000000时,超过1000000元的部分按 1%提成。从键盘输入当月利润I,求应发奖金总数。 int main() {int m…...

记忆科技携手中国电信,一站式存储打造坚实数字底座

11月10日,以“数字科技 焕新启航”为主题的2023数字科技生态大会在广州盛大开幕,本次大会由中国电信、广东省人民政府联合举办,是一场数字科技领域的年度盛会。忆联母公司记忆科技作为中国电信的合作伙伴之一受邀参会,深度参与了大…...

基于ssm的学生档案管理系统(有报告)。Javaee项目,ssm项目。

演示视频: 基于ssm的学生档案管理系统(有报告)。Javaee项目,ssm项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项目介绍&#xff…...

阿里云服务中断事件:原因、影响与解决方案

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰 如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊 文章目录 阿里云服务中断事件:原因、影…...

搜维尔科技:「体育类」Movella Xsens极限运动捕捉测试

搜维尔科技:「体育类」Movella Xsens极限运动捕捉测试...

CSS常用示例100+ 【目录】

目前已有文章 11 篇 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS相关…...

Shopee买家通系统之注册虾皮买家号大概需要多少成本

想要注册大量的虾皮买家号,可以使用shopee买家通系统进行注册,这款软件可以全自动化的注册虾皮买家号,不过想要自动化更方便,对于账号资料有一定的要求。 1、现在注册虾皮买家号基本上都是需要用手机号注册了的,而虾皮…...

华为层层“能力外溢”,让数智世界一触即达——选择华为,让您的企业轻松数智化

作者 | 曾响铃 文 | 响铃说 7万多人现场观赛,手机信号不掉链子,能发图片视频、能分享朋友圈; 消防、闸机等多个安防系统联动,风险事件自动报告,观赛、办赛安心; 运营数据全面打通、实时更新&#xff0c…...

MHA实验和架构

什么是MHA? masterhight availabulity:基于主库的高可用环境下可以实现主从复制、故障切换 MHA的主从架构最少要一主两从 MHA的出现是为了解决MySQL的单点故障问题。一旦主库崩溃,MHA可以在0-30秒内自动完成故障切换。 MHA的数据流向和工…...

C语言——函数

导读 : 这篇文章主要讲解一下C语言函数的一些基本知识。 前言:函数的概念 C语言中的函数又常常被称为子程序,是用来完成某项特定的工作的一段代码。就像我们生活中的模块化建造技术,类比模块化建房子的过程:整个程序…...

DDR SDRAM 学习笔记

一、基本知识 1.SDRAM SDRAM : 即同步动态随机存储器(Synchronous Dynamic Random Access Memory), 同步是指其时钟频率与对应控制器(CPU/FPGA)的系统时钟频率相同,并且内部命令 的发送与数据传输都是以该时钟为基准…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

数据链路层的主要功能是什么

数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

如何为服务器生成TLS证书

TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

网站指纹识别

网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

push [特殊字符] present

push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...