iOS面试深度解析:2018年最新考题
需积分: 15 44 浏览量
更新于2024-09-14
收藏 5KB TXT 举报
"这是一份2018年的iOS面试题集合,涵盖了Objective-C语言特性、设计模式、内存管理、多线程、UI组件、数据持久化、运行时等多个方面的内容,旨在帮助iOS开发者准备面试,提升技能。"
以下是根据摘要内容详细解释的知识点:
1. Objective-C动态性:
Objective-C是一门动态类型语言,它的动态性体现在运行时绑定(runtime binding)、动态加载类和方法、以及消息传递等方面。
2. MVC, MVVM, MVP:
MVC(Model-View-Controller)是经典的软件设计模式,用于分离业务逻辑、数据和用户界面。MVVM(Model-View-ViewModel)在MVC基础上引入了ViewModel,更利于数据绑定。MVP(Model-View-Presenter)中Presenter作为View和Model之间的桥梁。
3. 代理使用weak的原因:
代理通常使用`weak`防止循环引用,因为代理对象通常是一个拥有者对象,如果使用`strong`可能导致持有循环,使得两个对象都无法释放。
4. 属性的实质:
属性是Objective-C中的一个语法特性,包括setter和getter方法、ivar(实例变量)以及内存管理策略。默认的关键字包括`nonatomic`、`readwrite`、`assign`。
5. @dynamic和@synthesize:
`@dynamic`声明属性由运行时处理,通常用于协议中。`@synthesize`自动为属性生成setter和getter。
6. NSString与copy关键字:
`copy`用于创建字符串的副本,确保内存管理独立,避免原始字符串被修改。若使用`strong`,则可能指向同一块内存,修改一处会影响到另一处。
7. 实现拷贝功能:
若要让自定义对象支持拷贝,需要实现`NSCopying`或`NSCopying`和`NSMutableCopying`协议,并重写`copyWithZone:`或`mutableCopyWithZone:`方法。
8. 集合类的copy和mutablecopy:
`copy`返回不可变集合的浅拷贝,内部元素的引用不变。`mutableCopy`返回可变集合的深拷贝,允许修改拷贝后的集合及其元素。
9. IBOutlet与weak:
`IBOutlet`连接的视图通常用`weak`,因为它们被 nib 或 storyboard 拥有,避免循环引用。
10. nonatomic与atomic:
`nonatomic`是非原子性,效率高但不保证线程安全;`atomic`是原子性,保证基本的线程安全,但并非绝对线程安全。线程安全的实现通常需要额外的同步机制。
11. UICollectionView自定义布局:
自定义UICollectionViewLayout需要重写多个方法,如`layoutAttributesForItem(at:)`和`layoutAttributesForElements(in:)`,来指定cell的位置和大小。
12. Storyboard的弊端及避免方式:
故障排查困难、代码难以自动化测试。避免方式包括部分视图用代码创建、分离业务逻辑到单独的类。
13. 进程与线程:
进程是系统资源分配的基本单位,线程是CPU调度的基本单位。同步异步涉及是否等待任务完成,并发是在一个时间段内多任务执行,而并行是在同一时刻执行多任务。
14. 线程间通信:
iOS中线程间通信方式包括`NSOperationQueue`、`GCD`的`dispatch_queue`、`NSNotification`等。
15. GCD常用函数:
包括`dispatch_queue_create`创建队列,`dispatch_async`异步执行,`dispatch_group`组操作,`dispatch_barrier`屏障,信号量`dispatch_semaphore`,以及线程同步等。
16. 避免资源抢夺:
使用串行队列或GCD的同步机制(如`dispatch_barrier`)可避免资源抢夺。
17. 数据持久化:
数据持久化方法有SQLite(如FMDB)、Core Data、Plist、JSON、Property List等。
18. AppDelegate方法:
AppDelegate包含很多生命周期方法,例如`application:didFinishLaunchingWithOptions:`(首次启动),`applicationWillEnterForeground:`(从后台回到前台)等。
19. NSCache与NSDictionary:
NSCache是缓存类,比NSDictionary更适合缓存,因为它会在内存不足时自动清除数据。
20. DesignatedInitializer:
设计初始化器是类的主要初始化方法,子类需要调用父类的designated initializer来保证正确初始化。
21. description方法:
实现`description`方法可以自定义对象转为字符串的内容,便于调试和日志记录。
22. 内存管理:
Objective-C使用引用计数(ARC)管理对象内存,当对象引用计数为0时,对象会被释放。
23. Block本质:
Block是闭包,可以捕获和存储上下文中的变量。存在栈Block、堆Block两种,栈Block通常在函数内部生成,堆Block可能作为对象成员。
24. Block捕获变量:
默认情况下,Block捕获的局部变量是复制的,不能直接修改。`__block`关键字使变量在Block内部可变。
25. 消息发送机制:
当Objective-C向对象发送消息时,会通过运行时查找对应的方法实现并执行。
26. unrecognizedselector错误:
发送对象未实现的方法时会出现此错误。避免方式是检查方法名拼写、确保对象遵循协议、使用`respondsToSelector:`检查。
以上是iOS面试中常见的技术点,涵盖了许多iOS开发的核心概念和最佳实践。理解并掌握这些知识点对于iOS开发者来说至关重要。
点击了解资源详情
2023-05-29 上传
2023-05-19 上传
2023-09-01 上传
2023-12-25 上传
2023-12-08 上传
2023-10-19 上传
weixin_40452768
- 粉丝: 0
- 资源: 1
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全