iOS混合开发笔试题
本试卷共25道单项选择题,每题4分,总分100分,请选择你认为正确的选项,每题仅有一个正确选项。
Q1:关于 Objective-C Runtime,描述正确的是?
Swift 所有代码都依赖 OC Runtime 运行
Method Swizzling 可动态交换方法实现,常用于全局埋点
Runtime 消息转发只能拦截实例方法,不能拦截类方法
SwiftUI 依靠 Runtime 完成视图渲染
Q2:MVVM 架构在 iOS 项目中的核心优势是?
ViewModel 强持有 View,直接操作 UI 控件
业务逻辑与视图解耦,ViewModel 便于单元测试
天然消除循环引用、内存泄漏
无需数据绑定就能自动刷新界面
Q3:iOS SwiftUI 开发常见痛点,说法错误的是?
SwiftUI 与 UIKit 混编存在生命周期协同问题
视图频繁重绘,需合理管理 State、Equatable 减少刷新
无法实现弹窗、列表等基础界面
存在系统版本兼容问题,低系统缺少部分 API
Q4:iOS 原生 + Vue H5 混合开发,描述错误的是?
通过 JSBridge 完成 Vue 前端与 iOS 原生双向通信
Vue 页面登录态、路由可由原生统一管控,实现无缝切换
Vue 页面可直接调用 iOS 全部系统权限,无需原生封装插件
需要统一处理缓存、鉴权、图片上传等跨端交互逻辑
Q5:项目同时存在 OC/Swift 原生、老旧 JSP 页面、Vue 新 H5,代码耦合严重,最优改造方案?
暂停业务,一次性全量重构所有代码
按业务拆分原生公共组件,统一 JSBridge 基础库,新需求渐进改造
全部页面迁移 Vue,直接废弃原生代码
删除旧代码重新从零开发
Q6:iOS 客户端生成二维码主流实现方式是?
CoreImage CIQRCodeGenerator,原图偏小,需二次缩放优化清晰度
UIKit 提供现成高清二维码顶层 API
无法在二维码中间添加 Logo
生成逻辑必须放在主线程执行
Q7:App 内置行情 K 线,自研封装对比开源组件,描述准确的是?
开源组件性能一定优于自研
自研方案自由度高,便于自定义指标、手势交互
海量行情渲染无性能压力
简单业务场景优先从零自研 K 线
Q8:下列 iOS 优化手段中,不属于 UI 渲染优化的是?
规避离屏渲染、优化圆角绘制方案
大图异步解码、图片按需懒加载
增加接口本地缓存,减少网络请求次数
减少图层重叠,简化视图层级
Q9:App 内嵌网页从 JSP 向 Vue 技术栈迁移,iOS 客户端适配思路正确的是?
一次性下线全部 JSP 页面,全量切换 Vue
新旧页面并行过渡,统一 JSBridge 协议,兼容登录态与原生交互
Vue 页面无法和 iOS 原生互相调用
迁移无需考虑缓存、接口鉴权相关逻辑
Q10:Swift 与 OC 混编开发,说法正确的是?
Swift 可直接调用 OC 所有私有方法
OC 调用 Swift 代码需要配置生成 Swift 头文件
Swift 结构体可直接被 OC 识别调用
@objc 修饰的 Swift 方法不参与消息转发流程
Q11:Objective-C 属性声明中,代表弱引用的关键字是?
strong
weak
copy
retain
Q12:Swift 中定义不可变常量使用的关键字是?
var
let
static
final
Q13:UIViewController 生命周期中,仅会执行一次的方法是?
viewWillAppear
viewDidLoad
viewDidLayoutSubviews
viewWillDisappear
Q14:iOS 页面自适应布局的核心技术是?
Frame-based Layout
Autolayout
StackView
Manual Constraints
Q15:SwiftUI 中管理视图内部局部可变状态的属性包装器是?
@State
@Binding
@ObservedObject
@EnvironmentObject
Q16:ARM64 架构下 Objective-C isa 指针的优化方式是?
直接存储类对象完整地址
使用共用体 union 搭配位域存储多种信息
通过全局哈希表管理类继承关系
废弃 isa 指针,改用 class 属性标识类型
Q17:OC Runtime 消息转发完整流程正确顺序是?
方法解析 → 快速转发 → 慢速转发
快速转发 → 方法解析 → 慢速转发
慢速转发 → 方法解析 → 快速转发
方法解析 → 慢速转发 → 快速转发
Q18:Runloop 核心作用不包含以下哪一项?
管理线程事件、消息循环
线程空闲时降低 CPU 占用
保障定时器精准触发
直接跨线程修改 UI 控件属性
Q19:NSTimer 默认添加到 Runloop 的模式是?
NSDefaultRunLoopMode
UITrackingRunLoopMode
NSRunLoopCommonModes
UIInitializationRunLoopMode
Q20:关于 iOS 静态库与动态库区别,说法错误的是?
动态库编译时链接,静态库运行时加载
动态库可减小安装包体积,多 App 可共享
静态库代码会完整复制进最终可执行文件
动态库升级需要处理版本符号兼容问题
Q21:Vue3 中,组合式 API 用来创建响应式基础数据类型的 API 是?
ref
reactive
computed
watch
Q22:Vue 项目嵌入 iOS WebView,JSBridge 调用原生方法最佳实践是?
直接频繁同步调用大量原生接口
统一封装调用方法,增加异常捕获、超时处理
不需要判断 WebView 环境,直接执行
回调函数名称随机生成,无需管理
Q23:Vue 生命周期中,组件 DOM 已经渲染完成,可以获取 DOM 元素的钩子是?
created
mounted
setup
unmounted
Q24:Vue 单页应用嵌入 App WebView,页面返回逻辑处理合理方案?
完全依靠系统返回键,不做处理
Vue 内部维护路由栈,监听原生返回事件,优先执行前端路由回退
所有返回直接关闭整个 WebView
前端不维护路由,全部交给 App 原生控制
Q25:Vue 双向绑定 v-model 底层原理依托于?
自定义属性 + update 事件
定时器轮询
原生 ajax 轮询
全局变量监听