版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
iOS开发面试题(含详细答案·2026实操版)说明:本套面试题整理一线互联网公司真实面试高频考点,覆盖Swift基础、内存管理、多线程、UI原理、沙盒、工程优化、实战场景问题,答案贴合开发实操,无书面化套话,适配初中级iOS开发者面试备考。一、Swift核心基础(高频必问)1、简述逃逸闭包与非逃逸闭包的区别,以及实际使用场景答案:闭包作为函数参数时,根据调用时机分为非逃逸闭包和逃逸闭包,核心区别是闭包是否会脱离当前函数作用域执行。1.非逃逸闭包:默认状态,无需额外标记。闭包会在函数执行过程中、函数结束前完成调用,生命周期完全在函数作用域内,不会脱离当前函数。编译器可做内存优化,性能更高。2.逃逸闭包:需用@escaping标记。闭包的执行时机晚于函数执行结束,会脱离当前函数作用域,常见于异步回调、网络请求、延时任务等场景。实操场景:非逃逸:数组遍历forEach、普通排序回调等同步操作;逃逸:封装网络请求、延时执行、GCD异步回调、闭包属性存储。补充:逃逸闭包内部引用当前对象时,极易产生循环引用,必须使用weak、unowned修饰。2、Swift中struct和class的核心区别答案:1.类型本质:struct是值类型,class是引用类型。值类型赋值、传参时会完整拷贝一份数据,新旧对象相互独立;引用类型仅拷贝内存地址,多个对象共用同一块内存数据。2.继承特性:结构体不支持继承,类支持单继承,可实现多层继承、重写方法和属性。3.构造方法:结构体默认自带逐一成员构造器,可自定义构造器且无需保证所有属性初始化;类必须手动保证所有存储属性初始化,无默认逐一构造器。4.析构方法:结构体无deinit析构方法,类支持deinit,可在对象销毁前执行收尾逻辑。5.内存存储:值类型存储在栈区,读写速度快;引用类型对象数据存储在堆区,地址存储在栈区。开发规范:优先用结构体(模型、配置类数据),需要继承、共享数据、动态生命周期时使用类。3、Swift协议的特性,以及协议扩展的作用答案:协议是方法、属性、下标脚本的声明集合,仅定义规范,不实现具体逻辑,支持值类型、引用类型共同遵循。核心特性:1.支持多重遵循,弥补Swift单继承的短板;2.可定义默认属性、方法要求,区分必实现和可选实现(Swift原生无optional,需@objc修饰);3.支持协议组合,可通过typealias组合多个协议,限定类型范围。协议扩展作用:1.为协议所有遵循者提供统一默认实现,无需每个类型重复编写相同逻辑;2.实现面向协议编程,剥离冗余继承关系,代码解耦更彻底;3.可给系统原生类型(String、Array等)扩展统一通用方法。二、内存管理(面试重中之重)1、简述ARC内存管理机制,strong、weak、unowned区别答案:ARC即自动引用计数,是Swift默认的内存管理方式,无需手动管理retain、release。核心逻辑:系统自动统计对象的引用次数,引用计数为0时,自动销毁对象、释放内存。三种修饰符区别:1.strong(默认):强引用,持有对象引用,引用计数+1。只要存在强引用,对象就不会被销毁,是产生循环引用的核心原因。适用于绝大多数常规对象属性。2.weak:弱引用,不增加引用计数。对象销毁后,指针自动置为nil,安全无野指针。专门用于解决循环引用,适用于代理、闭包回调、子控件引用父对象等场景。3.unowned:无主引用,不增加引用计数,对象销毁后指针不会置空,访问会直接崩溃。适用于绝对不会为nil的场景,性能略优于weak。2、什么是循环引用?常见场景及解决方案答案:两个或多个对象互相持有对方的强引用,导致彼此引用计数永远无法归0,对象无法销毁,造成内存泄漏,这就是循环引用。常见场景:1.父子对象互相强引用;2.控制器闭包持有self,self又持有闭包属性;3.代理属性被强引用;4.嵌套模型相互强引用。解决方案:1.代理、回调属性统一用weak修饰;2.闭包内部使用weakself、unownedself打破强引用闭环;3.双向引用中,一端使用弱引用,避免双方强持有;4.页面销毁时手动置空闭包、代理属性。3、如何排查iOS内存泄漏?日常开发规避手段答案:排查工具:1.XcodeDebugMemoryGraph:实时查看内存对象,筛选未释放的实例,定位持有链路;2.Instruments工具:Leaks模块,精准检测内存泄漏点位、统计泄漏内存大小;3.自定义页面销毁检测:页面viewDidDisappear后,判断控制器是否释放,未释放即为泄漏。规避手段:1.所有代理、回调闭包统一弱引用修饰;2.定时器、通知、KVO必须在页面销毁时移除,避免残留持有;3.避免全局变量随意持有页面、视图对象;4.大图片、大数据数组使用后及时置空,释放内存。三、多线程与并发(进阶核心)1、GCD队列类型、区别及使用场景答案:GCD队列分为串行队列和并行队列,搭配同步、异步执行方式,组合出不同线程逻辑。1.串行队列(Serial):任务按顺序执行,同一时间仅执行一个任务,等待上一个任务完成后再执行下一个。适合需要顺序执行、保证线程安全的读写操作。2.并行队列(Concurrent):任务同时并发执行,无需等待上一个任务完成,由系统自动分配线程。适合多任务独立执行、耗时异步操作。系统自带队列:主队列:全局串行队列,所有UI刷新、页面操作必须在主队列执行;全局并行队列:系统提供的公共并发队列,分高、默认、低、后台四种优先级,日常耗时任务首选。核心组合规则:同步串行:当前线程顺序执行,不开启新线程;异步串行:开启一条新线程,顺序执行任务;异步并行:开启多条线程,并发执行任务;同步并行:当前线程顺序执行,不开启新线程。2、Swift5.5async/await与GCD回调的区别及优势答案:传统GCD依赖回调闭包实现异步逻辑,多层异步嵌套会形成回调地狱,代码层级混乱、可读性差,错误处理繁琐。async/await是Swift原生结构化并发方案,将异步代码写成同步样式,无需嵌套闭包,逻辑线性清晰。await会挂起当前线程,等待异步任务完成后再继续执行后续代码,不阻塞线程资源。核心优势:1.代码简洁,彻底解决回调地狱;2.支持try/catch统一异常处理,错误管控更规范;3.天然支持任务取消、优先级继承,适配复杂并发场景;4.可读性、可维护性远优于传统GCD嵌套回调。3、Task和DetachedTask的区别答案:1.Task(普通任务):继承父任务的上下文,包括线程优先级、任务局部参数、Actor执行上下文、取消状态。父任务取消后,子Task会自动取消,父子任务生命周期绑定,是日常开发首选。2.DetachedTask(分离任务):完全独立的任务,不继承父任务任何上下文,优先级、执行环境、取消状态均与父任务无关,不受父任务生命周期影响。仅适用于需要完全脱离当前业务、独立执行的后台任务,慎用,容易造成任务残留、内存浪费。4、iOS如何保证线程安全?常见解决方案答案:多线程同时读写同一可变数据,会造成数据错乱、崩溃,需保证线程安全,常用方案:1.串行队列:将读写任务放入同一串行队列,保证任务顺序执行,是最常用、最稳定的方案;2.栅栏函数(dispatch_barrier):并行队列中,栅栏任务会等待所有前置任务完成,再独占队列执行,执行完毕后后续任务继续并发,适合多读单写场景;3.锁机制:NSLock、递归锁、信号量,适合简单临界资源保护;4.数据隔离:将可变数据限定在单一线程操作,避免多线程访问;5.Swift并发:使用Actor隔离可变状态,天然保证线程安全。四、UI与事件响应1、UIView和CALayer的区别与关系答案:1.核心职责:UIView负责事件响应、用户交互、手势处理;CALayer负责页面渲染、图层展示、动画绘制,不处理任何交互事件。2.继承关系:UIView继承自UIResponder,具备响应者链条能力;CALayer继承自NSObject,无交互能力。3.层级关系:每一个UIView内部都默认绑定一个CALayer图层,View的所有展示效果(颜色、圆角、阴影)都由Layer渲染实现,View只是Layer的事件代理和交互载体。4.动画特性:CALayer支持隐式动画,修改属性自动触发动画;UIView默认关闭隐式动画,需手动开启动画事务。2、iOS事件响应链、触摸事件传递机制答案:事件整体流程分为事件传递和事件响应两个阶段。1.事件传递(从上到下):用户触摸屏幕后,系统先根据触摸坐标找到最顶层窗口,再通过hitTest:withEvent:方法层层遍历子视图,最终找到距离用户最近、可响应事件的最优视图。核心规则:从父视图向子视图传递,优先遍历最上层视图。2.事件响应(从下到上):找到最优响应视图后,执行touchesBegan、touchesMoved等触摸方法;若当前视图不处理事件,事件会向上传递给父视图,直至UIWindow、AppDelegate,无人处理则事件废弃。失效场景:userInteractionEnabled=NO、隐藏、透明度<0.01、超出父视图裁剪区域的视图,无法接收触摸事件。3、frame和bounds的区别答案:1.frame:基于父视图坐标系,描述当前视图在父视图中的位置和尺寸,修改frame会改变视图的位置和大小。2.bounds:基于自身坐标系,原点默认(0,0),描述视图自身的尺寸。修改bounds的size会改变视图大小,修改origin不会改变视图位置,只会偏移视图内部内容坐标,常用于滚动、缩放场景。五、沙盒与数据存储1、iOS沙盒目录结构及各目录用途答案:iOS应用只能访问自身沙盒目录,无法跨应用访问,沙盒主要包含4个核心目录:1.Documents:核心数据目录,会跟随iCloud备份。用于存储用户核心数据、本地缓存文件、用户个性化数据,适合需要永久保存、跟随用户账号迁移的数据。2.Library/Caches:缓存目录,不跟随iCloud备份。用于存储临时缓存、网络图片、日志文件、临时资源,系统会在存储空间不足时自动清理该目录,适合非核心可恢复数据。3.Library/Preferences:偏好设置目录,专门存放NSUserDefaults数据,用于存储简单键值对(开关、配置、用户状态)。4.tmp:临时目录,存放运行过程中的临时文件,应用退出、系统清理时会自动删除,不用于持久化存储。2、NSUserDefaults优缺点及使用注意事项答案:优点:使用简单、无需手动读写文件、系统自动持久化,适合轻量级键值对存储。缺点:读写性能差、不支持大数据存储、不支持复杂对象、数据同步有延迟、无加密机制、不适合存储核心业务数据。注意事项:1.仅存储布尔、字符串、数字等基础类型,禁止存储数组、字典大数据;2.数据写入存在异步延迟,关键数据可调用synchronize强制同步(新版本系统优化,日常无需频繁调用);3.不存储密码、密钥等敏感数据,敏感数据需存入Keychain。六、工程优化与实战问题1、iOSAPP启动优化方案答案:APP启动分为pre-main和main后两个阶段,优化核心是减少启动耗时、减少主线程阻塞。pre-main阶段优化:1.减少无用静态库、第三方依赖,精简编译链接资源;2.移除冗余类、分类、无用宏定义;3.优化动态库加载,减少启动时动态链接数量。main后阶段优化:1.didFinishLaunchingWithOptions中只保留核心初始化逻辑,非核心SDK、统计、弹窗、配置全部异步延迟初始化;2.避免主线程耗时操作,网络请求、数据解析、文件读写放入子线程;3.首页UI懒加载,非首屏视图、控件延迟创建;4.图片预加载优化,避免启动瞬间大量大图渲染。2、列表卡顿优化(UITableView/CollectionView)答案:列表卡顿核心原因:主线程耗时、视图重复创建、图层渲染耗时、数据计算冗余。优化方案:1.单元格复用:严格执行cell复用机制,禁止每次滚动创建新cell;2.预计算cell高度:提前缓存cell高度、布局尺寸,避免滚动时动态计算;3.减少图层渲染:减少圆角、阴影、渐变等耗性能图层属性,必要时离屏渲染缓存;4.数据预处理:网络数据、模型解析、富文本计算放在子线程,主线程仅赋值刷新UI;5.分页加载、限流刷新:避免一次性加载大量数据,滚动时暂停刷新、停止复杂运算;6.视图层级精简:减少cell内部嵌套视图层级,简化布局约束。3、敏感数据安全存储方案答案:禁止使用UserDefaults、普通沙盒文件存储密码、token、密钥等敏感数据,标准方案:1.钥匙串Keychain存储:系统级加密存储,数据卸载APP后仍可保留,支持设备加密,是账号密码、核心token首选存储方案;2.配置文件加密:私密密钥、接口密钥存入.xcconfig配置文件,配置文件加入.gitignore,避免代码上传泄露;3.数据混淆:运行时通过字节数组、异或算法解析密钥,避免明文硬编码;4.禁止明文存储所有敏感字段,传输过程使用HTTPS,本地存储加密后密文。七、面试高频实操问答题1、页面跳转卡顿、页面加载慢如何排查?答案:1.查看主线程任务:排查viewD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年保健辅助治疗器材零售行业投资价值分析报告及未来五至十年成本优化与效率提升
- 2026年音像制品出租行业研究报告及未来五至十年技术突破与应用落地
- 2026年贵阳水务集团有限公司人员招聘笔试模拟试题及详细答案解析
- 2026年茶馆服务行业投资战略研究报告及未来五至十年跨界融合与颠覆创新
- 2026年青岛广电影视传媒集团有限公司人员招聘笔试参考题库及详细答案解析
- 2026年贵州轮胎股份有限公司人员招聘参考题库及详细答案解析
- 2026年中国烟草总公司天津市公司人员招聘笔试备考题库及详细答案解析
- 2026年湖南兴湘投资控股集团有限公司人员招聘笔试备考题库及详细答案解析
- 2026年山东省曲阜市高三数学下册期末考试模拟考试卷【完整版】附答案
- 2026年广东省化州市高三数学下册期末考试模拟卷带答案(达标题)
- 《心灯录》完整版
- 2024年国家康复辅具研究中心附属康复医院聘用人员招聘真题
- 船舶修造基地项目吨浮船坞改建工程可行性研究报告
- 2025年宝武作业长培训考试题库
- 2025年国家公务员考试行测逻辑判断100题及答案
- 不要慌太阳下山有月光二部合唱简谱
- 康复护理关节活动度训练被动活动课件
- 小学生英语规范书写课件
- GB 17681-2024危险化学品重大危险源安全监控技术规范
- 玻璃生产企业安全生产风险分级管控和隐患排查治理双体系方案(2021-2022完整版)
- 江西祺利科技有限公司年产100万平方米HDI板生产项目 环境影响报告
评论
0/150
提交评论