2026年iOS开发工程师笔试真题(含详细答案解析)_第1页
2026年iOS开发工程师笔试真题(含详细答案解析)_第2页
2026年iOS开发工程师笔试真题(含详细答案解析)_第3页
2026年iOS开发工程师笔试真题(含详细答案解析)_第4页
2026年iOS开发工程师笔试真题(含详细答案解析)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年iOS开发工程师笔试真题(含详细答案解析)适用岗位:初中级iOS开发工程师|考试时长:90分钟|满分:100分说明:试题贴合2026年企业主流面试考点,聚焦Swift5.9+、iOS17/18新特性、工程优化、底层原理、实战避坑,无冗余理论,全部为职场高频实操考点。一、单项选择题(共10题,每题3分,共30分)1、Swift中关于struct和class的核心区别,下列说法错误的是()A、struct是值类型,class是引用类型B、struct默认无初始化器,class会自动生成默认空初始化器C、struct不支持继承,class支持继承D、struct存储在栈区,class对象存储在堆区2、下列关于Swiftweak、unowned、unowned(safe)、unowned(unsafe)的描述,正确的是()A、weak可以修饰值类型B、unowned引用无需解包,使用更高效,适合生命周期完全一致的场景C、weak修饰的变量为隐式解包可选型D、unowned(unsafe)会自动做nil判断,无崩溃风险3、iOS中RunLoop的默认运行模式是()A、UITrackingRunLoopModeB、kCFRunLoopDefaultModeC、kCFRunLoopCommonModesD、UICommonRunLoopMode4、Swift5.9新增的some/any关键字,下列用法错误的是()A、someProtocol代表遵循协议的具体单一类型B、anyProtocol代表任意遵循协议的类型,存在类型擦除C、some可用于返回值、参数、常量定义D、anyProtocol可以直接用于泛型约束5、下列不属于iOS内存泄漏常见场景的是()A、闭包内持有控制器self,未用weak修饰B、NSTimer强引用target,未及时销毁C、UIButton点击事件使用weak绑定方法D、代理属性用strong修饰而非weak6、关于GCD队列和任务,说法正确的是()A、主队列是串行队列,只能在主线程执行B、全局队列是串行队列,系统自动管理C、dispatch_sync在当前队列嵌套执行不会死锁D、dispatch_async一定会开启新线程7、iOS17新增的UI适配特性,下列说法正确的是()A、取消了动态类型适配B、新增TraitCollection更新回调,优化多场景适配C、不再支持安全区适配D、强制废弃AutoLayout,推荐手动frame布局8、Swift中lazy懒加载属性的特点,错误的是()A、首次访问时才初始化,延迟加载资源B、默认是线程安全的,多线程访问无风险C、必须声明为var可变属性D、适合加载耗时、占用内存大的资源9、关于Xcode编译架构,2026年企业主流打包架构是()A、armv7+x86_64B、arm64+x86_64C、arm64D、armv7s+arm6410、下列关于UserDefaults的使用规范,正确的是()A、可存储大量图片、视频数据B、数据写入是实时同步的,无延迟C、适合存储用户配置、开关状态、token等轻量数据D、可以直接存储自定义模型对象二、填空题(共5题,每题4分,共20分)1、Swift中的三大访问控制权限,优先级从高到低依次是:____、____、____、fileprivate、private。2、解决闭包循环引用的三种方式:____、____、____。3、RunLoop的核心作用是____、____,保证线程不退出、监听事件循环。4、iOS卡顿的核心阈值是:UI渲染帧率低于____帧,主线程单次任务耗时超过____秒。5、Swift中可选型解包的四种常用方式:强制解包、____、____、____。三、简答题(共4题,每题8分,共32分)1、详细说明weak和unowned的使用场景、区别及底层原理。2、简述iOS页面卡顿、掉帧的排查思路和优化方案。3、GCD死锁产生的条件是什么?列举2个常见死锁场景并说明解决方案。4、Swift中值类型和引用类型在内存管理、赋值逻辑、线程安全上的区别?四、编程题(共1题,18分)需求:使用Swift实现一个线程安全的单例工具类,同时满足以下要求:1、支持全局唯一实例,禁止外部初始化、拷贝2、基于GCD实现线程安全,适配多线程并发访问3、兼容Swift最新语法,代码简洁无冗余4、补充详细注释,说明核心逻辑参考答案及详细解析一、单项选择题答案解析1、答案:B解析:struct会自动生成成员初始化器,class默认无自定义初始化器时才会生成空初始化器,B选项描述错误。其余选项均为结构体和类的标准核心区别。2、答案:B解析:weak只能修饰引用类型,修饰后为可选型,需要解包;unowned无nil判断、无需解包,性能更高,适用于对象生命周期完全一致、不会提前释放的场景。unowned(unsafe)无安全校验,极易野指针崩溃,不推荐使用。3、答案:B解析:kCFRunLoopDefaultMode是RunLoop默认运行模式;UITrackingRunLoopMode为滑动模式,滑动页面时切换;kCFRunLoopCommonModes是模式集合,非实际运行模式。4、答案:D解析:anyProtocol不支持直接作为泛型约束,仅可用于参数、返回值;someProtocol为具体类型,可用于泛型、返回值等场景,是Swift5.9优化的核心点。5、答案:C解析:UIButton点击事件是系统自动管理生命周期,weak修饰不会造成内存泄漏;其余选项均为项目中高频内存泄漏场景。6、答案:A解析:主队列是串行队列,所有UI操作必须在主线程执行;全局队列是并发队列;同队列同步任务一定会死锁;async异步任务在并发队列才会开启新线程,主队列async不会开新线程。7、答案:B解析:iOS17优化了TraitCollection监听机制,新增精准的场景切换回调,适配暗黑模式、分屏、横竖屏切换;系统未废弃动态类型、安全区、AutoLayout,反而持续优化适配能力。8、答案:B解析:lazy懒加载非线程安全,多线程同时访问会出现重复初始化、崩溃等问题,多线程场景需手动加锁保护。其余选项为lazy标准特性。9、答案:C解析:2025年起苹果正式废弃32位armv7架构,2026年企业正式打包仅保留arm64架构,有效减小包体积,适配全系新款iOS设备。10、答案:C解析:UserDefaults基于plist文件存储,仅支持轻量基础数据,不支持大数据、自定义模型;数据写入是异步的,存在短暂延迟。二、填空题答案1、open、public、internal2、weak修饰self、unowned修饰self、闭包捕获列表弱化引用3、监听事件、处理任务(接收触摸、网络、定时器等事件,循环调度任务)4、60、0.175、可选绑定(iflet)、空合运算符(??)、守卫语句(guardlet)三、简答题详细答案1、weak和unowned的使用场景、区别及底层原理核心区别:(1)weak:弱引用,引用计数不+1,对象释放后自动置为nil,需要可选解包,线程安全,有轻微性能损耗;(2)unowned:无主引用,引用计数不+1,对象释放后不置nil,野指针访问直接崩溃,无需解包,性能更高。使用场景:(1)weak:适用于对象生命周期不一致的场景,如代理、闭包持有控制器、view持有model;(2)unowned:适用于对象生命周期完全绑定、宿主永远不会提前释放的场景,如控制器持有自定义view。底层原理:weak底层通过SideTable弱引用表存储引用地址,对象销毁时遍历弱引用表,将所有weak指针置空;unowned无额外存储表,直接保存对象地址,无校验逻辑,因此效率更高但不安全。2、iOS页面卡顿、掉帧排查思路和优化方案卡顿核心原因:主线程阻塞、UI渲染耗时过长,无法保证60帧/s渲染。排查工具:XcodeInstruments(CoreAnimation、TimeProfiler)、FPS检测工具、主线程耗时监控。排查思路:1、检测主线程耗时任务:排查网络请求、文件读写、大数据计算、循环遍历等耗时操作是否在主线程执行;2、检测UI渲染耗时:排查离屏渲染、图层混合、阴影圆角过量、约束冲突刷新;3、检测页面刷新频率:排查频繁layout、drawRect重复绘制、数据源频繁刷新。优化方案:1、耗时任务异步化:所有网络、计算、读写任务放入子线程,主线程仅做UI刷新;2、优化渲染性能:圆角阴影使用贝塞尔曲线预渲染、开启光栅化、减少图层重叠,避免离屏渲染;3、UI复用优化:列表使用cell复用,预加载数据,避免滚动时实时计算布局;4、任务节流防抖:高频刷新场景(滚动、输入)添加节流,减少UI刷新次数。3、GCD死锁条件、常见场景及解决方案死锁核心条件:同一个串行队列中,同步任务等待当前队列任务执行完成,任务互相等待、循环阻塞,线程无法继续执行。常见场景1:主线程同步调用主队列任务dispatch_sync(dispatch_get_main_queue(),^{});原因:主线程正在执行当前代码,同步任务需要等待主线程空闲,互相等待造成死锁。解决方案:将sync改为async,或放到子线程执行。常见场景2:自定义串行队列嵌套同步任务同一串行队列中,任务A内部嵌套dispatch_sync执行任务B,任务B等待任务A完成,形成死锁。解决方案:嵌套任务使用异步执行,或拆分队列,不同任务使用独立队列。4、Swift值类型与引用类型核心区别1、内存管理:值类型(struct/enum)存储在栈区,内存自动分配释放;引用类型(class)对象存储在堆区,指针存在栈区,通过ARC管理引用计数;2、赋值逻辑:值类型赋值是完全拷贝,新旧对象独立互不影响;引用类型赋值是指针拷贝,多个变量指向同一个堆内存对象;3、线程安全:值类型赋值独立、无共享资源,天然线程安全;引用类型多线程共享同一对象,读写操作会产生资源竞争,需要加锁处理;4、继承特性:值类型不支持继承,引用类型支持单继承、多协议遵循。四、编程题参考答案(线程安全单例)swift

importFoundation

///线程安全全局单例工具类(2026Swift标准写法)

finalclassAppManager{

//1、静态私有常量,全局唯一实例,static天然保证单次初始化

staticletshared=AppManager()

//2、私有初始化方法,禁止外部初始化

privateinit(){

//初始化配置

setupConfig()

}

//3、私有化拷贝构造,禁止对象拷贝、复制

privatefunccopy(){}

privatefuncmutableCopy(){}

///基础配置初始化

privatefuncsetupConfig(){

print("单例初始化完成")

}

//自定义工具方法示例

funcgetAppVersion()->String{

returnBDictionary?["CFBundleShortVersionString"]as?String??"1.0.0"

}

}

//调用方式

//letmanager=AppManager.shared

//print(manager.getAppVersion())

核心逻辑解析:1、final修饰类,禁止子类继承篡改单例;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论