还剩8页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
2025年最新iOS面试题和答案
一、选择题(本题型共15题,每题2分,共30分)
1.以下关于Swift和Objective-C的描述,错误的是()A.Swift是苹果推出的全新编程语言,支持类型推断B.Swift是静态类型语言,编译时会进行类型检查C.Objective-C是基于C语言的面向对象语言D.Swift不支持与Objective-C混编
2.在iOS开发中,用于管理界面元素的基础类是()A.NSObject B.UIView C.UIViewController D.NSBundle
3.以下哪个不是iOS中的网络请求方式()A.NSURLConnection B.AFNetworking C.URLSession D.NSTimer
4.Swift中,用于定义类的关键字是()A.class B.struct C.enum D.protocol
5.当UIImageView的contentMode设置为UIViewContentModeScaleAspectFit时,表示()A.保持图片原始比例,拉伸填满控件B.保持图片原始比例,居中显示,可能留有空白C.图片不保持比例,拉伸填满控件D.图片不保持比例,压缩显示
6.iOS应用生命周期中,从后台返回前台时触发的方法是()A.applicationWillEnterForeground:和applicationDidBecomeActive:第1页共10页B.applicationDidFinishLaunching:和applicationDidBecomeActive:C.applicationWillResignActive:和applicationDidEnterBackground:D.以上都不是
7.多线程一定能提高应用性能吗?()A.是B.否C.仅在特定场景下是D.取决于设备性能
8.Swift中,可选类型的表示方式是()A.变量名!B.变量名C.变量名$D.变量名#
9.以下关于iOS内存管理的描述,正确的是()A.引用计数为0时,对象一定会被立即释放B.自动释放池中的对象会在池被释放时被释放C.多线程中引用计数操作不需要加锁D.内存泄漏是指对象被错误释放
10.用于实现界面跳转的常用方法包括()A.[self presentViewController:animated:]B.[selfpushViewController:animated:]C.A和B都是D.以上都不是
11.Swift中,用于处理异步操作的关键字是()A.async/await B.@synchronized C.GCD D.NSOperation
12.以下哪个类用于存储用户偏好设置()A.NSUserDefaults B.NSMutableDictionary C.NSFileManagerD.NSKeyedArchiver
13.当UINavigationController的栈顶控制器需要返回时,使用的方法是()第2页共10页A.[self popToRootViewControllerAnimated:]B.[selfpopViewControllerAnimated:]C.A和B都是D.以上都不是
14.iOS中,用于实现定时器的类是()A.NSTimer B.CADisplayLink C.A和B都是D.以上都不是
15.Swift中,数组的append方法和+=操作符的区别是()A.两者功能完全相同B.append是方法,+=是操作符,功能相同C.append只能添加单个元素,+=只能添加多个元素D.append不是变异方法,+=是变异方法
二、填空题(本题型共10题,每题3分,共30分)
1.Swift中,可选类型可以使用_______语法进行解包,也可以使用_______语法进行强制解包
2.iOS应用生命周期中,当应用进入后台时触发的方法是_______和_______
3.MVC模式中,M代表_______,V代表_______,C代表_______
4.在Objective-C中,定义block的基本格式是_______;在Swift中,对应的闭包基本格式是_______
5.iOS中实现多线程的三种主要方式是_______、和
6.自动释放池主要用于管理_______对象,其内部通过_______机制实现内存管理
7.UIKit中,_______类用于管理导航栏,_______类用于管理标签栏
8.Swift中,struct(结构体)和class(类)的主要区别是_______(从值类型/引用类型角度)第3页共10页
9.iOS中,在主线程执行任务的方法(Objective-C)是_______,(Swift)是_______
10.深拷贝和浅拷贝的区别在于_______
三、简答题(本题型共8题,每题5分,共40分)
1.简述RunLoop的作用及其在iOS开发中的应用场景
2.解释iOS中自动释放池(Autorelease Pool)的工作原理
3.比较Swift可选类型(Optional)和Objective-C中nil的区别
4.说明MVC、MVVM、Clean Architecture三种架构模式的优缺点及适用场景
5.简述iOS中引用计数(Reference Counting)机制及内存管理规则
6.UIImageView的contentMode属性有哪些常用值?分别说明其含义
7.简述iOS应用启动优化的常见方法
8.解释Swift中逃逸闭包(@escaping)和非逃逸闭包(@noescape)的区别
四、Objective-C代码题(本题型共5题,每题5分,共25分)
1.实现一个函数,去除数组中的重复元素并保持原顺序o NSArray*removeDuplicates:NSArray*array
2.使用MVC模式实现一个简单登录界面,包含用户名TextField、密码SecureField和登录按钮,点击按钮后更新标签文本为HelloWorld
3.使用NSOperationQueue实现多任务依次执行(任务1→任务2→任务3),每个任务打印当前任务名称和执行线程第4页共10页
4.使用NSURLConnection获取https://example.com/data.json,并解析JSON中的content字段并打印
5.解释Objective-C中Category(分类)和Extension(扩展)的区别及使用场景
五、Swift代码题(本题型共5题,每题5分共25分)
1.实现函数func uniqueElementsT:Equatable_array:[T]-[T],去除数组重复元素并保持顺序
2.SwiftUI中实现一个登录界面,包含用户名TextField(请输入用户名)、密码SecureField(请输入密码)和登录按钮,点击按钮打印用户名和密码
3.使用URLSession获取https://example.com/data.json,解析JSON中的title字段并打印
4.对数组[1,3,5,2,4,6]使用闭包按升序排序并打印结果
5.实现一个简单的单例模式类,确保全局只有一个实例
六、架构设计与性能优化题(本题型共10题每题4分共40分)
1.比较MVC、MVVM、Clean Architecture的优缺点及适用场景
2.简述iOS组件化的概念及实现步骤
3.什么是依赖注入(DI)?在iOS开发中的好处是什么?
4.单例模式(Singleton)的定义及在iOS中的使用场景
5.如何避免iOS中的循环引用(Retain Cycle)?举例说明
6.解释KVO的实现原理及使用注意事项
7.RunTime(运行时)在iOS开发中的应用场景
8.Notification(通知)和Delegate(代理)的区别及适用场景
9.深拷贝(Deep Copy)和浅拷贝(Shallow Copy)的实现方式及区别第5页共10页
10.iOS中面向切面编程(AOP)的概念及应用场景
七、性能优化题(本题型共5题每题4分共20分)
1.iOS启动优化的主要方向及具体措施
2.内存泄漏的常见原因及检测方法
3.UITableView/UICollectionView性能优化的常用方法
4.UI渲染优化的主要方向
5.iOS网络优化的常用方法答案汇总
一、选择题
1.D
2.B
3.D
4.A
5.B
6.A
7.B
8.B
9.B
10.C
11.A
12.A
13.B
14.C
15.B
二、填空题⒈可选绑定(if let/guard let),强制解包(!)⒉applicationWillResignActive:,applicationDidEnterBackground:⒊Model(数据模型),View(视图),Controller(控制器)⒋returnType^blockNameparameterTypes;,{parameters-returnType incode}⒌GCD(Grand CentralDispatch),NSOperationQueue,pthread⒍临时创建的自动释放,引用计数(当池释放时调用release方法)⒎UINavigationBar,UITabBar(或UINavigationController,UITabBarController)⒏struct是值类型(Value Type),class是引用类型(ReferenceType)第6页共10页⒐[selfperformSelectorOnMainThread:withObject:waitUntilDone:],DispatchQueue.main.async⒑深拷贝会复制对象本身及内部所有引用类型成员,浅拷贝仅复制对象本身,内部引用类型共享原对象引用
三、简答题
1.RunLoop是线程的事件循环机制,负责接收/分发事件、处理定时器、PerformSelector延迟执行等,保持线程持续运行应用场景异步任务处理(GCD底层)、事件响应(UI事件)、定时器(NSTimer)回调等
2.自动释放池管理临时创建的自动释放对象,对象通过[objautorelease]或隐式自动释放添加到池,池释放时调用release,避免手动释放临时对象,减少内存管理错误
3.Swift可选类型(如Int)表示变量可为nil或有值,编译时检查nil;Objective-C的nil表示空对象指针,仅用于对象类型,基本数据类型nil无效,易导致崩溃
4.MVC优点结构简单,缺点控制器职责过重,适用小型简单应用;MVVM优点降低控制器复杂度,便于测试,缺点ViewModel可能庞大,适用中大型数据驱动应用;Clean Architecture优点分层清晰,低耦合,适用大型复杂应用
5.引用计数是对象内存管理机制,计数器为对象被引用次数创建时为1,retain时+1,release时-1,0时释放;ARC模式下编译器自动插入retain/release/autorelease,避免手动管理
6.UIViewContentModeScaleToFill(拉伸填满)、ScaleAspectFill(保持比例拉伸填充,可能裁剪)、ScaleAspectFit(保持比例居中第7页共10页显示,留空白)、Center(居中不缩放)、Top/Left等(角落显示不缩放)
7.启动优化方向延迟初始化非关键组件、优化编译链接(减少未用代码)、图片资源优化(压缩/按需加载)、阻塞操作移至后台线程、优化Info.plist、预编译头文件
8.逃逸闭包(@escaping)在函数执行结束后调用,需显式标记,可能导致循环引用;非逃逸闭包在函数结束前调用,编译器优化,无需额外处理例非逃逸闭包在函数内立即调用,逃逸闭包在异步任务回调中调用
四、Objective-C代码题-NSArray*removeDuplicates:NSArray*array{NSMutableArray*result=[NSMutableArray array];NSMutableSet*set=[NSMutableSet set];for idelement inarray{if![set containsObject:element]{[set addObject:element];[result addObject:element];}}return[result copy];}//
2.登录界面实现(省略.h文件,仅.m)-voidviewDidLoad{[super viewDidLoad];self.view.backgroundColor=[UIColor whiteColor];第8页共10页self.titleLabel=[[UILabel alloc]initWithFrame:CGRectMake50,100,200,30];self.titleLabel.text=@初始文本;[self.view addSubview:self.titleLabel];self.updateButton=[UIButtonbuttonWithType:UIButtonTypeSystem];[self.updateButton setTitle:@更新文本forState:UIControlStateNormal];self.updateButton.frame=CGRectMake50,150,200,40;[self.updateButton addTarget:selfaction:@selectorupdateLabelTextforControlEvents:UIControlEventTouchUpInside];[self.view addSubview:self.updateButton];}-voidupdateLabelText{self.titleLabel.text=@HelloWorld;}-voidexecuteTasksInOrder{NSOperationQueue*queue=[[NSOperationQueue alloc]init];queue.maxConcurrentOperationCount=1;//串行执行NSBlockOperation*task1=[NSBlockOperationblockOperationWithBlock:^{NSLog@任务1执行,线程%@,[NSThread currentThread];}];NSBlockOperation*task2=[NSBlockOperationblockOperationWithBlock:^{第9页共10页NSLog@任务2执行,线程%@,[NSThread currentThread];}];task
2.addDependencytask1;NSBlockOperation*task3=[NSBlockOperationblockOperationWithBlock:^{NSLog@任务3执行,线程第10页共10页。
个人认证
优秀文档
获得点赞 0