版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
iOS初级开发笔试题(含详细答案)适用人群:iOS初级开发、应届生、实习转正、零基础上岗面试考试时长:60分钟满分:100分一、单项选择题(共10题,每题3分,共30分)1.以下关于strong/weak/unowned描述正确的是?()A.unowned可以为nilB.weak修饰的变量,访问时不会崩溃C.strong不会产生循环引用D.weak修饰对象后,对象销毁时不会自动置空答案:B解析:unowned是非可选类型,不允许为nil,野指针访问会崩溃;多个strong互相持有极易产生循环引用;weak修饰的变量在对象销毁后会自动置空为nil,安全无崩溃。2.Swift中let和var的核心区别是?()A.let只能存基本数据类型,var可以存对象B.let是常量,赋值后不可修改;var是变量,可修改C.let线程安全,var线程不安全D.let内存占用更小答案:B解析:let定义常量,一旦赋值无法修改;var定义变量,支持后续重新赋值,二者均可修饰基本类型和对象类型,无内存、线程特性差异。3.以下哪种场景最容易造成循环引用?()A.结构体嵌套结构体B.两个类互相用strong持有对方C.枚举嵌套枚举D.单个类内部定义普通属性答案:B解析:循环引用仅存在于引用类型(类)中,值类型(结构体、枚举)无引用计数,不会产生循环引用。两个类互相强持有是最典型的循环引用场景。4.关于closure闭包捕获变量,说法错误的是?()A.闭包会捕获外部变量B.闭包默认强捕获引用类型变量C.闭包不会造成内存泄漏D.使用weakself可以避免闭包循环引用答案:C解析:如果闭包强持有self,同时self又持有闭包,会形成循环引用,导致内存泄漏,日常开发中必须通过weak/unowned打破持有关系。5.UIKit中frame和bounds描述正确的是?()A.frame基于自身坐标系,bounds基于父视图坐标系B.frame基于父视图坐标系,bounds基于自身坐标系C.两者坐标系完全一致D.bounds可以修改视图在父视图中的位置答案:B解析:frame是视图在父视图坐标系中的位置和尺寸;bounds是视图自身坐标系的尺寸,修改bounds只会改变内部子视图布局,不会改变自身在父视图的位置。6.下列不属于Swift访问控制修饰符的是?()A.publicB.privateC.protectedD.fileprivate答案:C解析:Swift访问控制包含open、public、internal、fileprivate、private,没有protected修饰符,protected是Objective-C、Java等语言的特性。7.iOS中主线程唯一必须执行的操作是?()A.数据解析B.网络请求C.UI刷新与布局更新D.日志打印答案:C解析:iOS规定所有UI相关操作必须在主线程执行,子线程刷新UI会出现界面卡顿、渲染异常、程序崩溃等问题。网络请求、数据解析均适合放在子线程。8.关于guardlet用法,说法正确的是?()A.guardlet解包失败会继续执行后续代码B.guardlet适合前置校验,失败直接退出当前方法C.guardlet解包后的变量只能在当前else中使用D.guardlet不能解包可选值答案:B解析:guardlet用于可选值安全解包,解包失败会执行else逻辑并终止当前代码执行,解包成功的变量可在当前整个函数作用域使用,常用于参数、数据前置校验。9.AutoLayout中intrinsicContentSize的作用是?()A.手动修改视图宽高B.视图根据自身内容自动计算固有尺寸C.强制刷新布局D.适配屏幕旋转答案:B解析:intrinsicContentSize为视图固有内容尺寸,UILabel、UIButton等控件会根据文字、内容自动计算自身适配尺寸,无需手动设置宽高。10.以下哪种方式可以解决tableView复用错乱?()A.关闭cell复用B.在cell赋值前重置所有展示数据C.每次创建全新cellD.增大cell高度答案:B解析:cell复用错乱的核心原因是旧数据残留,在cell数据赋值前重置文本、图片、状态等数据,可彻底解决复用错乱问题,关闭复用会严重影响列表性能。二、填空题(共5题,每题4分,共20分)1.Swift中值类型和引用类型的代表分别是:______、______。答案:结构体(结构体、枚举)、类2.打破闭包循环引用的两个关键字是______、______。答案:weak、unowned3.UI布局中,______是约束布局刷新方法,______是立即刷新布局的方法。答案:setNeedsLayout、layoutIfNeeded4.Swift可选类型的本质是______,用于解决变量无值的问题。答案:枚举(包含none、some两种状态)5.tableView实现自适应高度,需要设置的两个核心属性是______、______。答案:estimatedRowHeight、rowHeight=UITableView.automaticDimension三、简答题(共4题,每题8分,共32分)1.简单说说weak和unowned的区别,以及各自使用场景。参考答案:(1)weak:弱引用,修饰可选类型变量,对象销毁后会自动置空为nil,访问安全,不会崩溃。常用于代理、闭包中的self引用,适用于对象生命周期可能提前结束的场景。(2)unowned:无主引用,修饰非可选类型变量,不置空,若访问已销毁的对象会直接崩溃。适用于两个对象生命周期完全一致、不会提前销毁的场景,比weak性能略高。日常开发中,绝大多数防循环引用场景优先使用weak。2.简述tableView复用机制以及为什么会出现复用错乱。参考答案:复用机制:系统会维护一个cell复用池,页面滚动时,移出屏幕的cell不会被销毁,会存入复用池;新进入屏幕的cell会优先从复用池取出旧cell复用,无需重复创建,大幅提升列表滚动性能。复用错乱原因:复用的旧cell会保留上一次的展示数据、状态,若新数据赋值时没有清空旧状态,就会导致新旧数据叠加、状态混乱,出现图片、文字、选中状态错乱问题。3.说说Swift中struct和class的核心区别。参考答案:(1)类型不同:struct是值类型,class是引用类型;(2)内存机制:值类型赋值会完全拷贝,独立内存空间;引用类型赋值共享同一内存地址;(3)继承特性:struct不支持继承,class支持继承、重写;(4)引用计数:struct无引用计数,无内存泄漏、循环引用问题;class依靠ARC管理内存,易产生循环引用;(5)使用场景:简单数据模型用结构体,需要继承、生命周期、业务逻辑的场景用类。4.子线程刷新UI会有什么问题?为什么必须在主线程刷新UI?参考答案:子线程刷新UI会出现界面渲染异常、UI不更新、页面卡顿、闪屏,严重时直接触发程序崩溃。原因:UIKit所有控件、布局、渲染相关操作都是非线程安全的,主线程是UI专属操作线程,系统主线程拥有独立的UI渲染队列,保证UI操作有序、同步执行;多线程同时操作UI会引发资源竞争、渲染错乱。四、代码题(共1题,18分)需求:封装一个简单的网络请求工具,实现GET请求,完成以下要求:1.支持成功、失败回调;2.子线程发起请求,主线程回调结果;3.处理请求地址为空、网络异常基础容错;4.避免循环引用。参考答案(可直接运行):swift
importFoundation
classNetworkTool{
staticletshared=NetworkTool()
privateinit(){}//单例私有化初始化
typealiasSuccessBlock=([String:Any]?)->Void
typealiasFailBlock=(String)->Void
funcgetRequest(urlStr:String?,success:SuccessBlock?,fail:FailBlock?){
//基础参数校验
guardleturlStr=urlStr,!urlStr.isEmpty,leturl=URL(string:urlStr)else{
fail?("请求地址非法")
return
}
//创建请求任务
lettask=URLSession.shared.dataTask(with:url){data,response,errorin
//子线程回调结果,切换回主线程
DispatchQueue.main.async{
ifleterror=error{
fail?("网络请求失败:\(error.localizedDescription)")
return
}
guardletdata=data,letdict=try?JSONSerialization.jsonObject(with:data,options:[])as?[String:Any]else{
fail?("数据解析失败")
return
}
success?(dict)
}
}
task.resume()
}
}
//调用示例
classTestVC:UIViewController{
overridefuncviewDidLoad(){
super.viewDidLoad()
NetworkTool.shared.getRequest(urlStr:"/get"){resin
print("请求成功:\(res??[:])")
}fail:{msgin
print("请求失败:\(msg)")
}
}
}
代码解析:1.采用单例模式封装工具类,统一管理网络请求;2.通过guard做参数容错,拦截非法请求地址;3
温馨提示
- 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年中国石油集团海洋工程有限公司人员招聘笔试备考试题及详细答案解析
- 智能装备课件
- 虚劳的中医护理课件
- 2022浙DT9 民用建筑常用水泵和风机控制电路图
- T/CECS 10035-2019绿色建材评价金属复合装饰材料
- 粉末涂料销售人员培训内容
- 连续油管侧钻工艺技术
- 外挂悬挑式花篮盘扣脚手架安全专项施工方案7.17
- 天津中考高频词汇英语300个
- 可溃式制动踏板
- 医联官方平台查报告
- 表B. 0 .12施工进度计划报审表
评论
0/150
提交评论