​Swift 语言特性​​:请解释一下 struct和 class的主要区别。

特性​

​struct (值类型)​

​class (引用类型)​

​类型本质​

值类型 (复制时创建独立副本)

引用类型 (复制时共享同一实例)

​内存分配​

通常在栈上 (更快速)

在堆上 (需要ARC管理)

​可变性​

默认不可变 (需 mutating修饰方法)

默认可变

​继承​

不支持继承

支持单继承

​析构器​

无 deinit

有 deinit用于资源清理

​线程安全​

天然线程安全 (独立副本)

需手动同步 (多线程访问同一实例可能冲突)

​引用计数​

依赖ARC管理内存

内存管理​​:谈谈你对 ARC(自动引用计数)的理解。什么是强引用循环?如何避免?

Swift 在编译时自动插入 retain(增加引用计数)和 release(减少引用计数)指令,通过​​跟踪对象的引用关系​​自动管理内存生命周期。

解释 weak和 unowned的底层区别​​:

weak通过额外​​侧表(Side Table)​​ 实现自动置 nilunowned直接访问原始指针。.

​生命周期​​:描述一下 UIViewController的视图生命周期(例如 viewDidLoadviewWillAppearviewDidLayoutSubviews等)。在哪个方法里更新视图的布局或帧是安全的?

loadView() 创建视图层次的根视图

viewDidLoad()视图首次加载到内存

viewWillAppear(_:)视图即将出现

viewDidAppear(_:)视图完成显示

viewWillDisappear(_:)视图即将离开屏幕

viewDidDisappear(_:)视图已经离开屏幕

viewWillLayoutSubviews()视图​​即将计算子视图布局

viewDidLayoutSubviews()视图​​已完成子视图布局计算​​(frame已确定)

我们在viewDidLayoutSubviews()中更新视图布局或者帧是最安全的

​多线程​​:DispatchQueue.main.async和 DispatchQueue.global().async分别有什么作用?为什么更新UI必须在主队列进行?

DispatchQueue.main.async:从非主线程切换到主线程,确保UI操作在主线程执行

 DispatchQueue.global().async的作用:全局队列,是一个并发队列

UIKit 和 CoreAnimation 的底层代码​​未加锁​​(锁会降低性能),同一时间只允许​​主线程​​修改 UI 元素。

Objective-C 中CategoryExtension的区别是什么?Category 能否添加成员变量?如果不能,如何间接实现 “添加属性” 的效果?(考察 runtime 关联对象的理解)

category分类

用于给已经存在的类添加新方法,不能添加新的成员变量,可以有单独的文件,经常用于讲将一个庞大的类拆分为多个模块

类扩展

本质上是类的匿名分类,只能定义在类的实现文件中,可以添加私有成员变量,方法和属性

Category不能添加成员变量,因为oc的类在编译的时候就会确定内存布局,故无法添加

可以使用runtime关联对象实现,原理是将一个对象和另一个对象关联起来,可以达到添加属性的效果

关联对象本质上是通过 Runtime 函数,将一个对象(值)与另一个对象(宿主)建立关联关系,并通过唯一的 key 来标识这种关联。这种关联关系会被系统管理,当宿主对象被销毁时,关联对象也可以被自动清理。

Swift 的Optional(可选类型)是如何解决空指针问题的?请解释?!guard letif let的用法差异,以及nil coalescing??)运算符的底层逻辑。

其本质上是一个枚举类型

enum Optional<T> {case none       // 表示空值(nil)case some(T)    // 表示有值,关联值为具体数据
}

使用?声明一个可选类型,表示该变量肯为nil

!强制解包,将可选类型强制转换为非可选类型

if let 安全解包方式,判断可选值是否为nil,若有值,将值绑定到新变量并执行代码块,若为nil则跳过代码块

guard let 可选绑定-提前退出

??用于为可选值提供默认值

Objective-C 中strongweakassigncopy四种属性修饰符的区别是什么?

修饰符内存管理策略适用场景核心特点
strong强引用,会增加对象的引用计数(retain),持有对象直至自身被释放。大多数对象类型(如自定义类实例)确保对象不会被意外释放,是默认的对象修饰符。
weak弱引用,不增加引用计数,当对象被释放后,指针会自动置为 nil(避免野指针)。避免循环引用的场景(如代理 delegate不持有对象,对象销毁后自动清空指针,防止访问已释放内存导致崩溃。
assign直接赋值,不涉及引用计数,适用于基本数据类型。非对象类型(如 intfloatCGFloat 等)用于基本数据类型,若用于对象类型,对象释放后指针不会清空,可能导致野指针。
copy创建对象的副本并持有副本(copy 操作),不关心原对象的生命周期。不可变对象(如 NSStringNSArray 等)确保属性持有独立的副本,避免受原对象修改的影响。

Swift 中的inout参数和 Objective-C 的指针参数有什么异同

两者的核心目的一致:允许函数修改外部传入的变量,打破了函数参数默认的 "值传递" 限制。

Objective-C 指针参数:通过传递变量的内存地址(指针),函数可直接修改指针指向的内存数据。

Swift inout 参数:通过特殊的传递机制,使函数能够修改外部变量的值。基于 "复制 - 修改 - 写回"(Copy-In-Copy-Out)机制,并非直接操作内存地址

Objective-C 的@dynamic和 Swift 的dynamic关键字作用有何不同?(考察对动态特性的理解)

oc中的@dynamic与synthesize均用于处理属性的存取方法,但是行为完全相反

synthesize为默认行为,告诉编译器自动生成属性的存取方法,如果未显示声明,那么编译器会默认为属性生成synthesize property = _property

@dynamic告诉编译器不要自动生成存取方法和实例变量,由开发者来提供

在swift中

KVO(键值观察):Swift 的属性默认不支持 KVO,标记 dynamic 后才能被观察

隐含 @objc 的效果(自动暴露给 Runtime),且强制开启动态分发,确保成员能被 Runtime 动态修改(如方法交换)。

Swift 的Extension能否添加存储属性?如果不能,如何实现类似 “添加存储属性” 的效果?**(考察对 Swift 类型系统的理解)

扩展是不改变原有类型结构的前提下为其添加功能

扩展的核心作用是 “扩展功能” 而非 “修改结构

通过 Objective-C Runtime 的关联对象机制,为类(Class)添加 “伪存储属性”

 Objective-C 中NSObjectisKindOfClass:isMemberOfClass:有什么区别?在 Swift 中如何实现类似判断?(考察对类继承与元类的理解)

在 Objective-C 中,一切对象(包括类本身)都是 NSObject 的实例,存在两条关键的继承链

实例对象的继承链:实例对象 → 类对象(如 [Person class])→ 父类对象(如 [NSObject class])→ nil

类对象继承链:类对象 → 元类对象(Meta Class,类的 “类”)→ 父元类对象 → 根元类(Root Meta Class)→ 根类(NSObject)→ nil

调用 [obj isKindOfClass:cls] 时,会检查 obj 的整个继承链(包括自身所属类及所有父类)。

调用 [obj isMemberOfClass:cls] 时,仅检查 obj 直接所属的类(不包含父类)。

Swift 中protocolmutating关键字有什么作用?

mutating 关键字用于修饰协议中的方法,表明该方法 允许修改遵循协议的结构体(struct)或枚举(enum)的实例本身

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95932.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95932.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/95932.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA 2023更新git凭据

背景&#xff1a;已知原来从远程仓库获取的项目&#xff0c;需要更新git用户和密码&#xff0c;但是又不想删除本地项目环境&#xff08;不想重新获取新建项目&#xff09;。报错&#xff1a;remote: HTTP Basic: Access denied. The provided password or token is incorrect …

Docker 容器 OOM:从资源监控到JVM调优的实战记录

人们眼中的天才之所以卓越非凡&#xff0c;并非天资超人一等而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。———— 马尔科姆格拉德威尔 &#x1f31f; Hello&#xff0c;我是Xxtaoaooo&#xff01; &#x1f308; “代码是逻辑的诗篇&#xff…

【开题答辩全过程】以 基于微信小程序的宠物领养系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

【可信数据空间-连接器状态监控-Java代码集成】

可信数据空间-连接器状态监控-Java代码集成一、 核心概念1. Micrometer2. Micrometer Registry Prometheus3.Prometheus二、 依赖配置 (Maven)三、 集成步骤与代码示例场景一&#xff1a;在 Spring Boot 应用中集成&#xff08;最简单&#xff09;1. 添加依赖&#xff08;如上所…

反编译分析C#闭包

一、问题描述&#xff1a;比如有这样的代码&#xff1a;它的输出结果是 3&#xff0c;3&#xff0c;3。通过搜索得知这一现象是因为C#闭包导致的.我们借助ILSpy看下IL中间代码&#xff0c;首先它生成了一个名叫DisplayClass的类&#xff0c;类中定义了i的字段主代码&#xff1a…

卷积神经网络(CNN):从图像识别原理到实战应用的深度解析

目录一.CNN的技术必要性&#xff1a;破解传统图像处理的两大核心痛点痛点1&#xff1a;特征依赖人工设计&#xff0c;通用性差痛点2&#xff1a;全连接网络参数爆炸&#xff0c;训练难收敛二.CNN的核心原理&#xff1a;两大机制与分层感知逻辑1.核心机制1&#xff1a;局部连接&…

用 SPL 编写阿里云 FC2.0 函数

前言 在数字化转型持续加速的背景下&#xff0c;企业越来越多地将业务逻辑以服务化方式部署至云端。阿里云函数计算&#xff08;Function Compute&#xff0c;简称FC&#xff09;作为一种无服务器计算平台&#xff0c;屏蔽了底层资源运维的复杂性&#xff0c;使开发者能够专注…

AR 巡检与普通巡检有哪些区别,有哪些优势|阿法龙XR云平台

AR 巡检&#xff08;增强现实巡检&#xff09;与普通巡检&#xff08;传统人工巡检&#xff09;在技术应用、效率、准确性等多个维度存在显著差异&#xff0c;具体区别如下&#xff1a; 1. 巡检方式更智能 普通巡检&#xff1a;依赖人工现场观察&#xff0c;主要通过眼看、手…

Java中的volatile关键字详解

核心作用&#xff1a;解决可见性和有序性问题volatile 的主要作用可以归结为两点&#xff1a;1.保证变量的可见性 和 禁止指令重排序。2.它提供了一种轻量级的同步机制&#xff0c;3.但需要注意的是&#xff0c;它不能保证原子性。保证可见性&#xff1a;什么是可见性问题&…

【Linux】MySQL数据目录迁移步骤(含流程图踩坑经验)

在生产环境中&#xff0c;有时候你会遇到一些看似简单但实际上很棘手的问题。最近我就碰到了一次典型的服务器磁盘空间告急&#xff0c;最后通过迁移 MySQL 数据目录成功解决了问题。本文记录整个过程&#xff0c;包括我的分析思路、迁移步骤、踩坑和经验总结&#xff0c;希望对…

数据驱动下的连锁模式复制:技术科普与方法论深度解析

前言在连锁经营的赛道上&#xff0c;“复制”是核心命题&#xff0c;但绝非简单的“粘贴”。当行业进入数字化深水区&#xff0c;数据驱动正成为连锁模式突破增长瓶颈、实现高效复制的“隐形引擎”。本文将从技术科普与方法论心得两个维度&#xff0c;深度拆解数据如何重塑连锁…

数据库学习MySQL系列2、Windows11系统安装MySQL方法一.msi安装详细教程

方法一.msi安装详细教程 Windows系统下MySQL——.msi安装详细教程&#xff08;默认--只安装服务端“Server only”&#xff09;MySql官网地址&#xff1a;https://www.mysql.com/&#xff1b;快速下载通道请单击→ No thanks, just start my download.ps&#xff1a;其他资源(…

html+css+vue实现增删改查

代码如下&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>优化版 Vue.js CRUD 示例&l…

(计算机网络)DNS解析流程及两种途径

在计算机网络中&#xff0c;DNS&#xff08;Domain Name System&#xff09;用于 将域名解析为 IP 地址。一个完整的解析过程涉及 递归查询、迭代查询&#xff0c;以及多个关键角色&#xff08;LDNS、本地域名服务器&#xff1b;根服务器&#xff1b;顶级域名服务器&#xff1b…

数据结构——队列(Java)

一.基本概念 队列用来存储逻辑关系为“一对一”的数据&#xff0c;是一种“特殊”的线性存储结构。 特点&#xff1a; •先进先出&#xff1a;队列中元素的添加&#xff08;入队enqueue&#xff09;和移除&#xff08;出队dequeue&#xff09;遵循先进先出的原 则。 •端点&…

【Go】:mac 环境下GoFrame安装开发工具 gf-cli——gf_darwin_arm64

当前主要是关于gf_darwin_arm64的安装步骤 如何快速给mac电脑安装gfgf是什么安装步骤方法1&#xff1a;去github下载gf-cli去git上下载对应电脑版本的gf-cli验证下载文件是否二进制文件授予该文件权限方法2&#xff1a;去goframe官网教你下载步骤验证gf是否安装成功可能遇到的问…

【新】ApiHug官方文档-ApiHug Spring Security 扩展-补充说明

概述 在上次说明中我们写了ApiHug 如何做授权的&#xff0c; 这里有个概念的混淆&#xff0c; 其实 apihug 不是在spring security 上做的安全扩展&#xff0c; 应该是 apihug spring, 安全设计框架&#xff0c; 和本身 spring security 没有半毛钱关系&#xff0c; 而如果你…

【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇

概述&#xff1a;本篇是接着上一篇&#xff0c;细分出说明书的编写部分&#xff0c;实现这个功能的需求&#xff0c;是内部很多同事反馈&#xff0c;需要有个地方存工具&#xff0c;并且可以写说明书&#xff0c;如果需要的人&#xff0c;那么可以在界面上直接下载工具和查看工…

Mac设置中的安全性缺少“任何来源”

问题&#xff1a;用Mac安装软件&#xff0c;隐私性与安全性&#xff0c;想切换“任何来源”用来下载网站的app&#xff0c;但是菜单栏找不到“任何来源”选项&#xff0c;无法安装dmg的文件终端中一行代码设置出来&#xff1a;sudo spctl --global-disable &#xff08;禁用Mac…

uniapp开发小程序,列表 点击后加载更多数据

一、需求 1.初始显示限制:将每页条数limit改为5,确保初始只显示5条数据 2.查看更多功能:添加了loadMore方法,点击"查看更多"时加载下一页数据 3.实现查看更多功能,点击后加载更多数据 4.添加loading状态防止重复请求 添加hasMore状态判断是否还有更多数据 …