版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
iOS面试真题及详细答案(初高中级全套)一、Objective-C基础核心题1、简述OC中堆和栈的区别,以及对象存储位置参考答案:栈:系统自动分配、自动释放,内存空间小、读写速度快。主要存储局部变量、函数参数、基本数据类型变量。栈内存由系统管理,函数执行结束后立即回收,不存在内存泄漏问题。堆:手动管理(MRC)/自动托管(ARC),内存空间大、读写速度慢。所有OC对象都存储在堆内存中,指针变量存储在栈上,通过栈指针指向堆内存的对象。堆内存需要开发者把控引用计数,处理不当会产生内存泄漏、野指针问题。补充:全局变量、静态变量存储在静态区,程序运行期间全程存在,程序结束后系统回收。2、@property的关键字有哪些?各自作用和使用场景参考答案:1、内存修饰符strong:默认关键字,强引用。修饰对象类型,持有对象内存,只要有强引用指向,对象就不会销毁。适用于绝大多数成员变量、对象属性。weak:弱引用,不持有对象内存。引用计数不增加,对象销毁后指针自动置空,不会产生野指针。主要用于代理、循环引用场景(如页面代理、block回调)。assign:默认用于基本数据类型(int、float、BOOL),直接赋值,不做内存管理。不能修饰对象,会产生野指针。copy:拷贝特性,生成对象的新副本。NSString、NSArray、NSDictionary常用,防止外部可变对象修改影响内部属性值。2、访问修饰符readonly:只读属性,只有getter方法,没有setter方法,只能初始化赋值,后续无法修改。readwrite:默认属性,读写均可,自动生成getter、setter方法。3、线程修饰符nonatomic:非原子性,不加锁,访问速度快,日常开发通用。atomic:原子性,加线程锁,保证单条读写操作安全,但不保证线程整体安全,性能差,基本不用。3、copy和mutableCopy的区别参考答案:1、不可变对象(NSString、NSArray)copy:浅拷贝,只拷贝指针,不创建新内存地址,新旧对象指向同一块内存。mutableCopy:深拷贝,创建全新的可变对象内存副本,新旧对象内存独立,互不影响。2、可变对象(NSMutableString、NSMutableArray)copy、mutableCopy均为深拷贝,都会生成新内存对象。其中copy生成的是不可变对象,mutableCopy生成可变对象。核心总结:copy永远返回不可变对象,mutableCopy永远返回可变对象;不可变对象copy为浅拷贝,其余均为深拷贝。4、什么是循环引用?如何解决参考答案:两个或多个对象互相持有对方(相互strong引用),导致引用计数无法降为0,对象无法释放,造成内存泄漏,这就是循环引用。常见场景及解决方案:1、代理循环引用:协议代理属性统一用weak修饰,打破强引用闭环。2、Block循环引用:block内部引用self时,使用__weak弱化self,内部如需防止提前释放,可搭配__strong使用。3、对象相互持有:将其中一方的strong改为weak,断开强引用关系。二、Swift核心面试题1、Swift中let和var的区别,以及lazy懒加载作用参考答案:let:常量,赋值后不可修改,线程安全,性能更优,开发中优先使用。var:变量,赋值后可随时修改,适用于值会动态变化的场景。lazy懒加载:延迟加载属性,首次访问时才初始化赋值,只会加载一次。使用场景:1、减少页面初始化耗时,推迟非必要控件、数据的创建;2、解决属性相互依赖的初始化问题;3、节省内存,不用则不创建。注意:lazy属性必须用var修饰,常量无法懒加载。2、Swift引用类型和值类型的区别参考答案:值类型:struct、enum、基本数据类型。存储在栈内存,赋值时会完整拷贝一份数据,新旧变量独立互不影响。值类型没有引用计数,无需内存管理,线程安全。引用类型:class、闭包。存储在堆内存,赋值时只拷贝内存地址,多个变量指向同一个对象,修改一个会影响所有指向该对象的变量。依靠ARC管理内存,存在循环引用风险。3、Swift中weak、unowned的区别参考答案:两者都是弱引用,不增加引用计数,用于解决循环引用。weak:修饰可选类型,对象销毁后指针自动置为nil,使用时需要解包,安全性高,日常开发首选。unowned:修饰非可选类型,假定引用对象始终存在,不会置空。如果对象提前销毁,强行访问会直接崩溃,仅用于生命周期绝对一致的场景。三、多线程与GCD高频题1、GCD队列和任务的区别,串行、并行队列区别参考答案:任务:需要执行的代码块,分为同步任务(sync)、异步任务(async)。队列:用来存放任务的容器,遵循FIFO先进先出原则。串行队列:队列内任务逐个执行,上一个任务结束才会执行下一个,同一时间只有一个任务执行。并行队列:队列内任务同时执行,无需等待上一个任务结束,依赖多线程同时调度。核心组合规则:异步+串行:开启子线程,任务顺序执行;异步+并行:开启多条子线程,任务并发执行;同步+串行/并行:不开启新线程,在当前线程顺序执行。2、GCD死锁产生的原因及经典场景参考答案:死锁本质:当前线程等待队列中未完成的任务,互相等待、互相阻塞,导致代码永久停止执行。经典死锁场景:主线程同步执行主队列任务。主线程正在运行代码,此时调用dispatch_sync向主队列添加任务,主线程需要等待新任务执行完成,而新任务需要等待主线程当前代码执行完毕,双向等待造成死锁。补充:子线程串行队列中,同步添加当前队列任务,同样会产生死锁。3、GCD栅栏函数、延时函数、一次性函数用法参考答案:1、一次性函数dispatch_once:保证代码在程序生命周期内只执行一次,常用于单例创建,线程安全,无需手动加锁。2、延时函数dispatch_after:延迟指定时间后异步执行任务,不阻塞当前线程,常用于延迟加载、倒计时操作。注意是相对时间,不是绝对准时。3、栅栏函数dispatch_barrier_async:在并行队列中,栅栏任务会等待前面所有任务执行完毕,再执行自身任务,执行完成后才继续执行后续任务。主要用于读写分离,解决多线程读写冲突问题。四、内存管理与性能优化1、ARC的原理是什么?是编译时机制还是运行时机制参考答案:ARC是编译时自动内存管理机制,不是运行时机制。编译器会在编译代码阶段,自动为对象添加retain、release、autorelease代码,替代手动MRC内存管理。程序运行时不会额外做内存检测,只是编译阶段的代码插入优化。核心规则:谁创建、谁持有、谁释放,自动匹配对象的生命周期,无需开发者手动管理引用计数。2、iOS常见内存泄漏场景及解决方案参考答案:1、循环引用:代理未用weak、block未弱化self、父子对象互相强引用。解决方案:统一用weak/unowned打破闭环。2、定时器未销毁:NSTimer强引用target,页面退出未invalidate。解决方案:页面销毁时手动关闭定时器,或使用定时器封装类弱化引用。3、常驻线程未退出:自定义子线程持续运行,不主动终止,导致线程常驻内存。解决方案:任务执行完毕后结束线程。4、全局变量、静态变量常驻内存:全局集合持续添加数据不清理,造成内存堆积。解决方案:适时清空数据、释放资源。3、UITableView卡顿优化方案参考答案:1、复用机制优化:严格使用cell复用,避免每次滑动创建新cell,注册cell复用标识,减少对象创建销毁开销。2、预处理数据:提前计算cell高度、控件布局,避免cellForRow中动态计算高度、处理复杂逻辑,可使用预缓存高度数组。3、视图层级优化:减少cell内嵌套层级,避免多层view叠加,尽量使用纯代码布局,减少自动布局约束冲突。4、异步处理耗时操作:图片解码、网络请求、数据解析放在子线程,主线程只做UI刷新。5、滑动优化:滑动时停止刷新、停止动画,结束后再恢复;按需加载数据,分页加载,避免一次性加载大量数据。6、资源优化:图片压缩、适配屏幕尺寸,避免超大图片渲染卡顿。五、UI与Runtime面试题1、UIView和CALayer的区别与联系参考答案:联系:UIView内部封装了CALayer,所有UI展示、渲染效果都依赖CALayer实现,View是Layer的事件处理载体。区别:1、职能不同:UIView负责处理用户交互、触摸事件、手势响应;CALayer只负责页面渲染、绘制、动画展示,不处理交互。2、继承不同:UIView继承自UIResponder,具备事件响应能力;CALayer继承自NSObject,无交互能力。3、性能不同:CALayer更轻量,无事件处理开销,动画渲染性能优于View。2、Runtime核心作用及常用场景参考答案:Runtime是OC的底层运行时机制,让OC具备动态特性,所有方法调用本质都是消息发送机制。核心常用场景:1、方法交换(MethodSwizzling):拦截系统方法,实现无侵入式功能扩展,如统一处理按钮点击、日志统计、防重复点击。2、动态添加属性:利用关联对象,为分类动态添加成员变量,弥补分类无法添加属性的缺陷。3、动态方法解析:方法未实现时动态补救,防止程序崩溃。4、字典转模型:利用runtime遍历对象属性,自动赋值,实现通用字典模型转换。六、网络与项目实战题1、HTTP和HTTPS的区别参考答案:1、安全性:HTTP明文传输,无加密,数据易被劫持、篡改、窃听;HTTPS基于SSL/TLS加密传输,数据加密、校验完整、防篡改。2、端口不同:HTTP默认80端口,HTTPS默认443端口。3、性能:HTTP连接简单、响应快;HTTPS需要握手加密、解密,耗时更长,性能略低。4、证书:HTTPS需要CA数字证书认证,HTTP无需证书。2、AFN常见问题及适配方案参考答案:1、请求参数乱码:设置请求序列化格式,统一UTF-8编码,禁止默认中文编码异常。2、HTTPS证书校验失败:开发环境开启证书忽略校验,线上环境配置正规证书,开启双向校验。3、网络超时、重试:自定义超时时间,添加网络重试机制、弱网/无网状态监听。4、请求重复:添加请求队列管理,相同接口重复请求时取消上一次请求。七、面试压轴基础问答1、页面跳转生命周期顺序(UIViewController)参考答案:页面push生命周期:alloc-init-loadView-viewDidLoad-viewWillAppear-viewLayoutSubvie
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年江西省庐山市高三物理下册期末考试模拟检测卷带答案
- 2026年河南省荥阳市高三生物下册期末考试模拟考试卷含答案
- 2026年安徽省宁国市高一化学上册期末考试测试卷附参考答案(完整版)
- 2026年浙江省义乌市高三生物上册期末考试模拟试卷含答案
- 2026年山西省侯马市高一化学上册期末考试模拟卷(综合题)附答案
- 五年级数学下册 第3课时 求一个数是另一个数的几分之几
- 基于栅格邻域可视性的最优路径问题深度剖析与算法优化
- 基于机器视觉的嵌入式道岔缺口检测系统:原理、应用与展望
- 基于机器学习的CDN-P2P文件分发网络用户需求预测模型构建与实践
- 基于有限元的球磨机结构强度精细化解析与优化策略研究
- 2026全国青少年全国禁毒知识竞赛试题及答案
- 2026年《中级健康照护师》考试题库及答案
- 门诊疑难病例讨论制度
- T/CES 251-2023储能系统变流器涉网性能硬件在环检测规范
- 2026年红河州弥勒市城发悦途旅行社有限公司招聘(5人)笔试参考题库及答案详解
- 第一章-动物的生殖器官
- 苏少六年级美术上册二单元 3.发现色调里的情感教学课件
- 新疆交通投资(集团)有限责任公司2026年秋季校园招聘(767人)笔试模拟试题及答案详解
- 2026年浙江省专升本高等数学基础习题集
- 2026中国现代农业服务行业市场现状农业生产分析研究规划报告
- 2026版公路水运工程试验检测专业技术人员职业资格考试《交通工程一本通》
评论
0/150
提交评论