版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
iOS基础测试题及详细答案适用场景:iOS初级开发面试、岗位基础考核、零基础进阶自测题型说明:选择题(10题)、填空题(5题)、简答题(8题),全覆盖iOS核心基础知识点,答案详细贴合实际开发场景一、单项选择题(共10题,每题3分,共30分)1.以下关于Swift中let和var的说法,正确的是()A.let修饰的变量可以二次赋值B.var修饰的变量可读可写,支持二次赋值C.let和var功能完全一致,无区别D.结构体属性只能用var修饰2.iOS应用程序的入口方法是()A.viewDidLoadB.mainC.initD.didFinishLaunchingWithOptions3.以下不属于Swift基本数据类型的是()A.IntB.StringC.ArrayListD.Bool4.UIViewController中,页面加载完成、视图渲染完毕后调用的方法是()A.viewDidLoadB.viewDidAppearC.viewWillLayoutSubviewsD.viewDidLayoutSubviews5.Swift中可选类型(Optional)的核心作用是()A.简化代码书写B.处理空值,防止空指针崩溃C.提升代码运行速度D.方便类型转换6.以下关于栈区和堆区的说法,正确的是()A.结构体存储在堆区,类存储在栈区B.结构体存储在栈区,类实例存储在堆区C.所有数据都存储在栈区D.所有数据都存储在堆区7.iOS中监听页面点击、滑动等用户交互事件的核心响应机制是()A.代理模式B.通知机制C.响应者链条D.KVO监听8.Swift中闭包的默认特性不包括()A.捕获上下文变量B.全局闭包会产生循环引用C.可以作为参数、返回值使用D.可简写语法,省略参数括号、返回值9.解决iOS页面跳转、闭包回调中循环引用,最常用的关键字组合是()A.weak/unownedB.static/finalC.lazy/mutatingD.private/fileprivate10.以下哪种方式适合跨多个页面、全局传递消息()A.代理DelegateB.闭包回调C.NotificationCenter通知D.KVO二、填空题(共5题,每题4分,共20分)1.Swift中结构体是值类型,______是引用类型。2.视图控制器生命周期中,页面即将显示调用________,页面即将消失调用________。3.Swift中强制解包可选类型使用________,可选绑定使用________关键字。4.iOS自动布局核心是________,通过约束适配不同屏幕尺寸,替代传统frame布局。5.懒加载属性需要通过________关键字修饰,仅在首次调用时初始化。三、简答题(共8题,每题6-7分,共50分)1.简述Swift中值类型和引用类型的核心区别,以及日常开发常用场景。2.详细说明UIViewController的完整生命周期及各方法的执行时机、作用。3.什么是可选类型?日常开发中常用的解包方式有哪些?分别说明优缺点。4.简述iOS响应者链条的传递流程。5.什么是循环引用?iOS中常见的循环引用场景及解决方案是什么?6.代理(Delegate)和通知(Notification)的区别是什么?各自适用什么场景?7.简述frame和bounds的区别,日常布局中如何区分使用?8.简单说明KVO的原理、使用场景及注意事项。参考答案(详细解析)一、单项选择题答案及解析1.答案:B解析:let修饰常量,赋值后不可修改;var修饰变量,支持读写、二次赋值。结构体、类属性均可使用let/var修饰,无强制限制。2.答案:B解析:iOS程序真正入口是main函数,负责开启程序主运行循环;didFinishLaunchingWithOptions是应用启动完成的回调方法,并非程序入口。3.答案:C解析:Swift基础集合类型为Array、Set、Dictionary,无ArrayList类型,ArrayList是Java集合类型。4.答案:D解析:viewDidLoad是视图加载完成(仅执行一次),未完成布局渲染;viewDidLayoutSubviews是视图布局、渲染全部完成后调用,可获取准确的视图尺寸。5.答案:B解析:可选类型是Swift核心特性,用于标识变量可以为空(nil),强制规避空值调用导致的崩溃问题,保障代码安全性。6.答案:B解析:值类型(结构体、枚举、基本数据类型)存储在栈区,内存由系统自动管理;引用类型(类)实例对象存储在堆区,指针存储在栈区,需要手动管理内存引用计数。7.答案:C解析:响应者链条是iOS事件传递的核心机制,用户触摸、滑动等交互事件会通过链条逐级传递,找到最终响应的视图或控制器。8.答案:B解析:全局闭包无持有者,不会产生循环引用;只有嵌套闭包、持有控制器/视图的闭包,才容易出现循环引用问题。9.答案:A解析:weak修饰弱引用,对象销毁后自动置空;unowned修饰无主引用,适用于对象生命周期一致的场景,二者均可打破循环引用。10.答案:C解析:通知支持全局跨页面、跨模块传值,无需页面层级关联;代理、闭包适用于一对一、层级明确的传值场景,KVO适用于属性监听。二、填空题答案及解析1.类(class)解析:Swift核心区分规则:结构体、枚举、基础类型为值类型;类为唯一的引用类型。2.viewWillAppear、viewWillDisappear解析:viewWillAppear:页面即将展示,每次页面显示都会调用;viewWillDisappear:页面即将消失,跳转、返回前触发。3.!、iflet/guardlet解析:!为强制解包,风险较高,空值会崩溃;iflet/guardlet为安全可选绑定,是开发主流用法。4.AutoLayout(自动布局)解析:通过上下左右、宽高、居中约束,适配所有iOS设备屏幕,适配性远优于frame固定坐标布局。5.lazy解析:懒加载属性不会随对象初始化立即创建,仅在首次访问时初始化,节省内存资源,适合创建耗时、占用内存大的控件。三、简答题详细答案1.值类型和引用类型核心区别及使用场景核心区别:①存储区域:值类型存栈区,引用类型实例存堆区;②赋值逻辑:值类型赋值是值拷贝,新旧变量相互独立,修改互不影响;引用类型赋值是指针拷贝,新旧变量指向同一个内存对象,修改会相互影响;③内存管理:值类型由系统自动回收,引用类型依靠ARC引用计数管理内存。使用场景:值类型(结构体、枚举)适合存储基础数据、模型数据,保证数据独立安全;引用类型(类)适合创建控件、工具类、业务逻辑类,支持继承、多态,可复用对象实例。2.UIViewController完整生命周期及作用1.init():控制器初始化,创建控制器对象,仅执行一次,用于初始化基础属性;2.loadView():加载视图,系统自动创建根视图,禁止手动重写打乱布局;3.viewDidLoad():视图加载完成,仅执行一次,是页面初始化代码的核心入口,用于创建控件、赋值、注册监听;4.viewWillAppear():页面即将显示,每次页面弹出、返回都会调用,用于刷新页面数据、开启定时器;5.viewWillLayoutSubviews():视图即将布局,控件开始调整位置尺寸;6.viewDidLayoutSubviews():视图布局完成,可获取控件真实尺寸、约束生效;7.viewDidAppear():页面完全展示,用于页面展示后的后续操作;8.viewWillDisappear():页面即将消失,用于移除监听、暂停定时器、保存临时数据;9.viewDidDisappear():页面完全消失,完成页面销毁前的收尾操作;10.deinit():控制器销毁,释放内存,用于移除通知、KVO,防止内存泄漏。3.可选类型及解包方式、优缺点可选类型是Swift为解决空值问题设计的特性,表示变量可以有值,也可以为nil,所有可选类型默认值均为nil,从语法层面规避空指针异常。常用解包方式及优缺点:①强制解包(!):代码简洁,缺点是变量为nil时直接崩溃,仅适用于百分百确定有值的场景;②可选绑定(iflet):安全解包,空值不执行代码、不崩溃,缺点是代码层级嵌套;③守卫解包(guardlet):安全解包,无嵌套,代码逻辑更清晰,空值直接提前返回,是项目主流规范用法;④空合运算符(??):为空值设置默认值,无需判空,简洁高效,适合数据兜底场景。4.iOS响应者链条传递流程1.用户触发触摸、点击等事件,系统将事件加入事件队列,由UIApplication统一分发;2.事件优先传递给当前程序的主窗口UIWindow;3.窗口遍历自身子视图,通过点击范围判断,找到用户交互的最顶层子视图;4.若当前视图可以响应事件(userInteractionEnabled=true),则处理事件;若无法响应,将事件向上传递给父视图;5.逐级向上传递,直至UIViewController、UIWindow、UIApplication,若全程无响应,则事件丢弃。5.循环引用的定义、场景及解决方案循环引用:两个或多个引用类型对象,互相持有对方的强引用,导致引用计数无法归零,对象无法销毁,最终造成内存泄漏。常见场景:①控制器持有闭包,闭包强引用控制器;②两个自定义类互相强引用对方属性;③代理属性使用强引用修饰。解决方案:①闭包中使用[weakself]/[unownedself]打破强引用;②双向引用场景中,一方用weak弱引用修饰;③代理属性统一用weak修饰,避免强引用持有。6.代理和通知的区别及适用场景核心区别:①传递方式:代理是一对一传值回调,通知是一对多全局传值;②耦合度:代理耦合度低,逻辑清晰;通知耦合度高,全局监听易混乱;③依赖关系:代理需要协议绑定,通知无需页面关联,全局可用。适用场景:代理适用于两个页面、两个控件之间的精准回调(如tableView数据源、按钮点击回调);通知适用于跨多层级页面、全局多个页面同步响应事件(如登录状态刷新、网络状态变化)。7.frame和bounds的区别及使用场景核心区别:①frame:以父视图坐标系为基准,描述当前视图在父视图中的位置和尺寸;②bounds:以自身坐标系为基准,默认原点(0,0),仅描述自身尺寸,不区分位置。使用场景:需要调整控件在父视图中的位置、做视图平移动画时,使用frame;需要调整控件内部子视图布局、缩放控件自身内容时,使用bounds。8.KVO原理、场景
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学习进度跟踪系统使用制度
- 优化理论研究设备资源共享方案
- 2026年浙江省杭州市第一中学高三英语第8单元听力理解巩固习题及答案
- 2026年工程现场管理业务知识试题附答案
- 能源资源合作协议二篇
- 直肠癌造口的护理
- 提高护理文书质量品管圈
- 老年护理学授课
- ISO-IEC 27701 新旧版本变更要点深度解读(2019vs2025)
- 2026年西华大学大学英语期末试题及答案
- 2025 肝硬化腹水查房课件
- 未来五年铁观音行业直播电商战略分析研究报告
- 小班美工《图形添画》课件
- 街道辅助人员笔试试题(附答案)
- 职场动物进化手册
- 银行分流引导课件
- 贫血病人疑难病例讨论
- 系统工程课件完整版
- 粤语教学课件
- 军队文职人员(中医学)科目近年考试真题(200题)
- 医学课件酸碱平衡紊乱
评论
0/150
提交评论