版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
iPhone开发面试题及详细答案(实战版)一、基础核心原理篇(初级必问)1、简述iOS的沙盒机制,以及沙盒主要目录作用?参考答案:iOS沙盒是系统为每个APP单独分配的独立文件空间,各个APP之间相互隔离、无法直接访问对方数据,是iOS系统安全机制的核心,未经授权不会泄露用户和应用数据。沙盒核心四个目录:1、Documents:主要存放用户生成的核心数据、业务数据,比如用户缓存的文件、离线数据。该目录会被iTunes、iCloud备份,适合保存需要持久保留的重要数据。2、Library/Caches:存放缓存数据、临时资源、网络缓存图片、日志等。不会被系统自动清理,也不会被iCloud备份,适合存放可重新生成的资源,APP卸载后数据同步删除。3、Library/Preferences:存放APP配置信息、用户偏好设置,比如开关状态、登录配置、主题设置,系统自动管理,不建议手动操作文件。4、tmp:临时文件目录,存放运行过程中产生的临时数据。系统会在APP退出、设备空闲时自动清理,不用于持久化存储。2、ARC和MRC的区别?ARC原理是什么?参考答案:MRC是手动内存管理,需要开发者手动写retain、release、autorelease管理对象引用计数,极易出现内存泄漏、野指针崩溃,目前项目基本不再使用。ARC是自动引用计数管理,并非完全不用管理内存,而是编译器在编译阶段自动帮我们插入内存管理代码,替代手动操作。核心原理:编译器根据代码作用域、对象持有关系,自动在合适位置添加retain、release代码,对象超出作用域、无强引用时自动释放,从语法层面规避大部分基础内存问题。ARC核心规则:强引用持有对象、弱引用不持有,弱引用对象释放后会自动置空,避免野指针。3、strong、weak、copy、assign的使用场景和区别?参考答案:1、strong:默认属性修饰符,强引用。持有对象所有权,只要有强引用指向,对象就不会被释放。适用于所有OC对象,比如UI控件、自定义模型、数组字典等。2、weak:弱引用,不持有对象。对象释放后指针自动置空,不会产生野指针。专门用于解决循环引用,比如代理、block内部引用控制器、控件弱引用。3、copy:拷贝特性,会生成新对象,修改新对象不会影响原对象。主要用于NSString、NSArray、NSDictionary等不可变容器,防止外部可变对象修改导致数据异常。4、assign:直接赋值,不做内存管理。只用于基本数据类型(int、float、BOOL),不用于OC对象,会产生野指针问题。4、什么是循环引用?如何解决?参考答案:两个或多个对象互相使用strong强引用持有对方,导致双方引用计数永远无法归零,对象无法释放,造成内存泄漏。常见场景:控制器与代理相互引用、block内部强引用控制器、自定义模型互相持有。解决方案:1、代理统一使用weak修饰;2、block内部使用weakSelf、strongSelf搭配使用,打破循环引用;3、双向引用场景中,一方使用weak修饰。二、UI与适配篇(初中级核心)1、Frame和AutoLayout的区别,各自优缺点?参考答案:Frame是通过坐标、宽高固定控件位置和尺寸,基于父视图绝对布局。优点:逻辑简单、渲染效率高,静态页面适配稳定;缺点:适配多机型、横竖屏、动态尺寸极其麻烦,代码冗余,屏幕尺寸变动后需要手动计算坐标。AutoLayout是相对布局,通过约束描述控件之间的相对关系,不写固定坐标。优点:适配所有iPhone机型、横竖屏切换、动态内容高度极其方便,代码简洁,适配性强;缺点:约束冲突、冗余容易报错,复杂嵌套页面渲染性能略低于Frame,调试成本稍高。2、iOS动态Cell高度的实现原理和流程?参考答案:核心原理:依靠AutoLayout约束,让Cell内部控件上下约束完整,系统自动计算Cell自适应高度。实现流程:1、设置tableView的预估行高estimatedRowHeight;2、设置rowHeight为UITableViewAutomaticDimension;3、Cell内部所有控件添加完整上下约束,顶部控件距Cell顶部、底部控件距Cell底部约束齐全,文本、标签开启自动换行;4、刷新列表时,系统会根据内部约束自动计算每个Cell的真实高度。进阶优化:复杂页面可提前计算缓存高度,避免滑动卡顿。3、iPhone各类屏幕适配的核心注意点?参考答案:1、刘海屏、灵动岛适配:必须适配安全区域,避免UI被状态栏、灵动岛、底部小黑条遮挡,通过safeAreaLayoutGuide布局,不写固定顶部、底部间距;2、屏幕比例适配:禁止写固定宽高坐标,使用相对约束、比例约束,适配小屏、大屏、Pro系列机型;3、暗黑模式适配:图片、文字颜色、背景色适配系统深浅外观,避免暗黑模式下UI看不清;4、横竖屏适配:需要横竖屏切换的页面,约束必须支持动态拉伸,禁止固定尺寸。三、多线程与性能篇(中级高频)1、GCD常用队列区别?主队列、全局队列、自定义队列差异?参考答案:1、主队列(main):串行队列,所有UI刷新、界面操作必须在主队列执行,主线程卡顿会直接导致页面卡死。2、全局队列(global):系统提供的并发队列,分高、默认、低、后台优先级,用于执行耗时任务,比如网络请求、数据解析、文件读写。3、自定义串行队列:自己创建的串行队列,任务按顺序执行,可用来处理有序耗时任务,避免资源竞争;4、自定义并发队列:多任务同时执行,适合无顺序要求的批量耗时操作。2、如何解决tableView滑动卡顿问题?参考答案:日常开发中卡顿核心原因是主线程做了过多耗时操作,优化方案如下:1、耗时操作异步处理:图片解码、数据解析、富文本计算、网络请求全部放到子线程,主线程只做UI刷新;2、缓存处理:缓存Cell高度、富文本布局、图片资源,避免滑动时重复计算;3、图片优化:使用缩略图、预渲染图片,避免大图直接加载,做好图片裁剪、压缩;4、UI轻量化:减少Cell嵌套层级、减少透明视图、阴影、圆角离屏渲染,圆角尽量用贝塞尔曲线预渲染;5、按需加载:滑动过程中停止耗时操作,滑动静止后再加载数据,减少瞬时性能消耗。3、离屏渲染是什么?哪些场景会触发?如何优化?参考答案:离屏渲染是GPU需要提前在额外缓冲区渲染图层,再展示到屏幕,比正常渲染消耗更多性能,极易造成滑动卡顿。常见触发场景:1、设置layer圆角+裁剪同时开启;2、添加阴影、模糊效果;3、图层遮罩、光栅化操作。优化方案:1、静态圆角图片提前裁剪,代码内尽量避免同时裁剪+圆角;2、阴影通过路径优化,指定shadowPath减少计算;3、对固定静态视图开启shouldRasterize光栅化,缓存渲染结果,动态视图禁止开启。四、网络与数据篇(业务必备)1、iOS网络请求主线程、子线程的使用规范?参考答案:所有网络请求、数据解析、文件读写等耗时操作,必须放在子线程执行,防止阻塞主线程导致页面卡顿、ANR。网络请求回调、数据刷新UI、刷新列表、更新控件样式,必须切回主线程执行,子线程禁止操作UI,否则会出现UI错乱、隐性崩溃。2、AFN常见问题及优化方案?参考答案:常见问题:请求超时、重复请求、网络状态异常、证书报错、适配HTTPS失败。优化方案:1、封装统一请求工具类,统一处理超时、重试、状态码判断、错误提示;2、添加请求节流,防止按钮重复点击发起多次请求;3、适配HTTPS证书校验,生产环境开启证书验证,杜绝不安全请求;4、统一处理无网络、弱网、超时、服务器异常等状态,提升用户体验;5、缓存常用接口数据,离线状态读取本地缓存。3、UserDefaults的优缺点和使用规范?参考答案:优点:使用简单、系统原生支持、轻量持久化,适合存储简单配置数据。缺点:读写速度慢、数据存在内存缓存、大体积数据会拖慢APP启动速度、不适合存大量数据。使用规范:只存放开关状态、用户配置、登录标识、版本号等轻量数据,禁止存储模型、数组、大图等大量业务数据,大量数据优先使用FMDB、文件归档。五、崩溃与调试优化篇(中高级)1、iOS常见崩溃类型及解决方案?参考答案:1、野指针崩溃:对象已释放,指针依然访问。解决方案:用weak修饰临时对象,提前做空值判断,避免提前释放对象调用方法;2、数组字典越界:下标超出数据长度、读取空集合数据。解决方案:所有数组取值前做个数判空、下标合法性判断;3、循环引用内存泄漏:长期运行导致内存飙升、闪退。解决方案:严格使用weak打破循环引用;4、主线程操作异常、UI刷新错乱:子线程刷新UI导致崩溃。解决方案:所有UI操作强制回到主线程;5、参数空值、类型不匹配:后台返回空数据、字段类型变动导致崩溃。解决方案:数据解析层层判空,做容错处理。2、APP启动优化怎么做?参考答案:启动分为预处理、main函数前、main函数后三个阶段,优化核心是减少主线程耗时。1、main函数前:删减无用静态库、删除冗余资源、精简编译代码,减少系统加载耗时;2、main函数后:将非必要初始化操作(第三方SDK初始化、日志、统计、预加载数据)移至子线程或首页渲染完成后延迟执行;3、资源优化:压缩图片、删除冗余图片、废弃资源,减少打包体积和加载时间;4、业务优化:首页按需加载,不一次性加载全部业务代码和数据,优先渲染核心UI。3、内存泄漏如何检测和修复?参考答案:检测工具:Xcode自带Leaks工具、MemoryGraph内存图,可精准定位泄漏对象和引用链路。常见泄漏场景:循环引用、定时器未销毁、通知未移除、block强引用、常驻线程未释放。修复方案:1、定时器、通知、KVO在页面销毁时及时移除、置空;2、所有代理、回调遵循weak修饰原则;3、自定义常驻线程在不用时手动结束;4、排查双向强引用,打破引用闭环。六、实战场景面试题(高薪必问)1、页面大量富文本、图文混排,滑动卡顿怎么处理?参考答案:1、提前在子线程计算富文本布局、文字尺寸、图文位置,缓存布局结果,滑动时直接读取渲染;2、使用轻量化图文控件,减少图层嵌套,关闭不必要的圆角、阴影、模糊效果;3、对静态图文页面开启光栅化缓存,提升滑动帧率;4、分页加载图文数据,不一次性加载全部富文本内容,减少瞬时渲染压力。2、如何防止APP被闪退、卡死,提升稳定性?参考答案:1、全局做数据容错,所有接口数据、数组、字典、字符串读取前判空、判类型;2、所有耗时操作异步处理,避免主线程阻塞;3、页面生命周期严格管理,页面销毁终止所有未完成请求、定时器、通知、KVO;4、添加全局异常捕获,拦截未知崩溃,上报日志并保护APP不闪退;5、规范内存管理,杜绝循环引用,控制内存峰值,避免系统因内存过大查
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江省杭州市第二中学七年级英语第7单元阅读理解专项训练习题及答案
- 知识运用能力评价体系
- 2026年广东省深圳市第一小学三年级语文上册第2单元作文专项训练习题及答案
- 2025年金属材料检验复习题及答案
- 2025年邮政集团财务岗招聘复习题及答案
- 2026中国隐私计算技术在金融领域的数据流通解决方案报告
- 胰腺内分泌的恶性肿瘤的护理
- 膝关节单髁置换护理
- 偏瘫病人的护理措施及问题
- 2026装饰建材智能家居整合方案行业供需互动关系与发展投资价值分析
- 2025至2030年中国游戏动漫教育培训机构行业市场发展规模及投资潜力研判报告
- 课本剧知识教学课件
- 列车清洗机产品介绍
- 数据中心智能化-全面剖析
- 《思想道德与法治》(23版):第五章 遵守道德规范 锤炼道德品格
- 胃排空迟缓的护理
- 关节痛的诊断
- 《学习指导与练习 语文 基础模块 上册》参考答案
- 《腐蚀与防护讲》课件
- 腹腔镜附件切除护理查房课件
- 克罗恩病-课件
评论
0/150
提交评论