Swift开发——弱占用

自动引用计数(Automatic Reference Counting,ARC),是Swift语言管理类的实例的方式。当创建某个类的一个新实例后,ARC自动为新实例分配内存空间,用于保存实例的类型和存储属性,当将该实例赋给常量、变量或其他实例的属性时,称两者建立了“强连接”,或称“强引用”,只要这个强引用存在,ARC将保护该实例,其占据的内存不能被释放。相对地,可以定义“弱引用”,弱引用的实例可以被释放掉,指向该实例的变量将自动置为空值nil。
01、弱引用
解决强引用环问题的方法有两种:其一,采用弱引用方式;其二,采用非占用引用方式。弱引用方式下,不再被强引用的实例会立即从内存中释放掉,故弱引用方式用于类的实例具有短的生命期的情况下,非占用引用方式用于类的实例具有较长生命期的情况下。
弱引用方式在定义变量时需使用weak关键字,在程序段1中,将第26行的语句添加weak,改为
“weak var author:Author?”;或者将第40行的语句添加weak,改为“weak var book:Book?”;或者上述两条语句均添加weak关键字。这种添加了weak关键字后的语句将构成弱引用。程序段1的执行结果如图1所示。

■ 图1 添加了弱引用的程序段1的执行结果
由图1可知,类Book和类Author的析构器均被执行了,说明这两个类创建的实例都被从内存中释放掉了。以程序段8-7的第26行改为弱引用为例,其引用结构如图2所示。

■ 图2 添加了弱引用后的引用结构
在图2中,当将zh和bk都置为空值nil后,图2(b)中左侧的Author实例没有被其他实例强引用,故该实例将被ARC从内存中释放掉,此时,执行该实例的析构器,输出“The Author instance is deallocated.”。然后,Book实例没有被其他实例强引用,故ARC将其从内存中释放掉,此时,执行该实例的析构器,输出“The Book instance is deallocated.”。
相关文章:
Swift开发——弱占用
自动引用计数(Automatic Reference Counting,ARC),是Swift语言管理类的实例的方式。当创建某个类的一个新实例后,ARC自动为新实例分配内存空间,用于保存实例的类型和存储属性,当将该实例赋给常量、变量或其他实例的属性…...
化工电力系统RFID无线测温技术的重要性。
在现代工业体系中,化工电力系统的安全与效率对于整个生产链的顺畅运行至关重要。在日常工作中,由于设备制造的原因,设备受环境污染的原因、设备长期运行、严重超载运行、触点氧化、电弧冲击等原因造接触电阻增大,因此在运行时往往不断发热,温度不断上升,给设备安全运…...
Linux系统:线程互斥
Linux系统:线程互斥 线程互斥互斥锁 mutex互斥锁原理 常见的锁死锁自旋锁 spinlock其它锁 线程互斥 讲解线程互斥前,先看到一个抢票案例: class customer { public:int _ticket_num 0;pthread_t _tid;string _name; };int g_ticket 10000…...
【网络协议栈】TCP/IP相关知识点收集
TCP/IP知识点收集 1 TCP分段 在TCP/IP协议栈中,“MSS”(Maximum Segment Size)是一个关键参数,它指定了TCP协议在发送数据时可以使用的最大数据段(segment)的大小。这个参数是TCP连接建立时通过三次握手&…...
Java开发中的常用字段校验注解
在 Java 开发中,数据校验是确保应用程序的数据完整性和一致性的重要步骤。Java 提供了一系列注解来简化数据校验的过程,以下是一些常用的字段校验注解及其示例代码: NotNull NotNull 用于确保字段不为 null,适用于任何类型的字段…...
面试经验分享 | 24年6月某安全厂商HW面试经验
所面试的公司:某安全厂商 所在城市:安徽省 面试职位:蓝初 面试过程: 腾讯会议(语音) 面试过程:整体流程就是自我介绍加上一些问题问题balabalabala。。。由于面的是蓝队所以渗透部分不会太多…...
JSON学习
一、JSON 1.1 简介 JSON:JavaScript Object Notation是一种表示对象的方式 基于JavaScript语言的轻量级的数据交换格式;(即:用来传输数据的一种格式) 现在传输数据的方式更多是采用json的格式,渐渐代替了XML 1.2 JSON的数据表示 …...
LabVIEW在中国航天中的应用
LabVIEW是一种系统设计平台及开发环境,由美国国家仪器公司(NI)开发。它在中国航天领域的应用非常广泛,涵盖了测试与测量、数据采集、控制系统设计等多个方面。以下是LabVIEW在中国航天中的几个主要应用实例: 1. 测试…...
编程思维的培养
培养编程思维是成为一名优秀程序员的重要步骤。编程思维不仅仅是写代码的能力,还包括解决问题的思维方式、对复杂系统的理解、代码优化的意识、团队合作的能力等。以下是一些培养编程思维的方法和建议。 1. 学习基础知识 1.1 掌握编程语言 从一门编程语言开始&am…...
Docker笔记-Debian容器内搭建ssh服务
登陆容器之后修改密码: passwd 密码设置完成后安装openssh-server apt-get install openssh-server 修改端口号为50022并添加配置 vim /etc/ssh/sshd_config 修改成 Port 50022 PasswordAuthentication yes PermitRootLogin yes 启动 rootlinux:~# /etc/in…...
爬虫的法律风险是什么?以及合法使用爬虫技术的建议。
爬虫的法律风险是什么? 网络爬虫技术,虽然在数据获取方面具有巨大优势,但其使用过程中可能引发的法律风险也不容忽视。这些风险主要包括违反数据保护法规、侵犯知识产权、构成不正当竞争等。下面将详细探讨网络爬虫的法律风险,并在…...
微信小程序允许相机访问相册
// 允许从相机和相册扫码 // uni.scanCode({ // success: function(res) { // console.log(条码类型: res.scanType); // console.log(条码内容: res.result); …...
AMEYA360 | 江苏润石最新发布12颗车规级模拟芯片
日前江苏润石再度新增12颗通过AEC-Q100 Grade1,满足MSL 1湿敏等级认证的车规级芯片。截止目前,润石科技总计有70颗Grade1 & MSL1的车规级芯片通过认证并进入量产。凭借卓越的产品技术指标和稳定的品质性能不仅展示了公司在车规级模拟芯片领域的技术积…...
PHP表单设计:确保必需字段完整性的最佳实践
在开发网页应用程序时,设计一个具有必需字段的PHP表单是至关重要的。必需字段是用户提交表单时必须填写的信息,它们对于确保数据完整性和准确性至关重要。本文将从多个方面讨论如何在PHP表单中设计必需字段,并探讨确保表单数据完整性的最佳实…...
CentOS 7 安装部署Cassandra4.1.5
一、Cassandra的介绍 Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源,此后࿰…...
【数据结构与算法】对称矩阵,三角矩阵 详解
给出对称矩阵、三角矩阵的节省内存的存贮结构并写出相应的输入、输出算法。 对称矩阵和三角矩阵可以通过特殊的存储结构来节省内存。这种存储结构只存储矩阵的一部分元素,而不是全部元素。 对称矩阵:对于一个n阶对称矩阵,我们只需要存储主对…...
Apache IoTDB 走进东南大学,深入分享项目发展历程与收获
源于高校,回到高校,Apache IoTDB PMC 成员乔嘉林为同学们详细分享行业前瞻、研发历程与心得体会。 01 把领先的数据库知识带到校园 6 月 5 日,东南大学计算机科学与工程学院、软件学院、人工智能学院主办的“拔尖领航系列活动特别策划篇-第二…...
Stable Diffusion AI绘画助力建筑设计艺术创新——城市建筑设计大模型分享
大家好,我是向阳 今天我将针对建筑设计方面的AI大模型进行简单介绍,我们将通过富有想象力的关键词或结合Stable Diffusion 的ControlNet 给原本只有黑白线条的线稿变成彩色的效果图,可能你只需要短短几分钟就可以让黑白线稿变成几种甚至十几种…...
没有 ADetailer,ComfyUI 画图脸崩了怎么办?
我们都知道 SD 的 WebUI 中的面部修复神器是 ADetailer,不过它是 WebUI 的专属插件,在 ComfyUI 中是搜索不到这个插件的,但是并不代表 ComfyUI 就不能使用面部修复功能了,ComfyUI 中也是可以找到平替的。 今天我们就来讲讲在 Com…...
防爆气象仪的工作原理
TH-WFB5矿山气象传感器在矿山安全监测系统中扮演着至关重要的角色,它们能够及时发现异常情况,为矿山的安全运营提供可靠的数据支持。矿山气象传感器能够实时监测矿山环境中的风速、风向、温度、湿度和大气压力等关键气象参数。这些传感器采用先进的传感技…...
4重防护构建安卓安全屏障:APKMirror应用管理全攻略
4重防护构建安卓安全屏障:APKMirror应用管理全攻略 【免费下载链接】APKMirror 项目地址: https://gitcode.com/gh_mirrors/ap/APKMirror 在安卓应用下载的数字丛林中,恶意软件如同潜伏的猎手,时刻准备利用用户对新版本的渴望发起攻击…...
从Flask裸奔到MCP标准落地:7步迁移指南+自动转换脚本(已验证支撑日均50万次Agent调用)
第一章:Python MCP 服务器开发模板概览与核心价值Python MCP(Model-Controller-Protocol)服务器开发模板是一套面向协议驱动微服务架构的轻量级开发框架,专为快速构建符合 MCP 规范的 AI 工具集成后端而设计。它抽象了协议适配、会…...
MediaPipe Holistic实战效果:一张照片生成全身骨骼图,效果超乎想象
MediaPipe Holistic实战效果:一张照片生成全身骨骼图,效果超乎想象 1. 引言:当AI遇见全身感知 想象一下,你只需要上传一张普通的全身照片,AI就能自动识别出你的面部表情、手势动作和身体姿态,并生成一张精…...
Java高频面试题:RocketMQ有哪些使用场景?
大家好,我是锋哥。今天分享关于【Java高频面试题:RocketMQ有哪些使用场景?】面试题 。希望对大家有帮助;Java高频面试题:RocketMQ有哪些使用场景?RocketMQ 是阿里巴巴开源的一款分布式消息中间件࿰…...
Dify向量检索精度跃升47%的秘密(重排序Pipeline低延迟部署避坑手册)
第一章:Dify重排序算法精度跃升47%的核心动因解析Dify v0.12.0 引入的重排序(Reranking)模块并非简单叠加模型,而是通过三重协同优化机制实现精度质变。核心突破在于将传统单阶段打分范式升级为「语义对齐—上下文感知—动态归一化…...
[技术突破]M9A:构建《重返未来:1999》智能自动化解决方案
[技术突破]M9A:构建《重返未来:1999》智能自动化解决方案 【免费下载链接】M9A 1999 小助手 项目地址: https://gitcode.com/gh_mirrors/m9/M9A 实现游戏体验革新的技术价值 M9A作为专为《重返未来:1999》设计的智能自动化工具&#…...
用Mermaid Live Editor 5分钟搞定技术图表:从零开始的完整实战指南
用Mermaid Live Editor 5分钟搞定技术图表:从零开始的完整实战指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid…...
3步彻底解决Umi-OCR Rapid版本HTTP服务无响应问题:参数配置完全指南
3步彻底解决Umi-OCR Rapid版本HTTP服务无响应问题:参数配置完全指南 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件,适用于Windows系统,支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://git…...
基于SpringBoot的租车系统毕设实战:从需求建模到高可用部署
最近在辅导学弟学妹做毕业设计,发现很多“基于SpringBoot的租车系统”项目,虽然功能列表很长,但仔细一看,架构松散,业务逻辑像面条代码,更别提应对真实场景下的并发问题了。今天,我就结合自己做…...
突破性AI音乐创作革新:腾讯SongGeneration开源项目全解析
突破性AI音乐创作革新:腾讯SongGeneration开源项目全解析 【免费下载链接】SongGeneration 腾讯开源SongGeneration项目,基于LeVo架构实现高品质AI歌曲生成。它采用混合音轨与双轨并行建模技术,既能融合人声与伴奏达到和谐统一,也…...
