iOS面试深度解析:2018年最新考题
需积分: 15 15 浏览量
更新于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开发者来说至关重要。
点击了解资源详情
2018-04-25 上传
2016-01-07 上传
2014-12-27 上传
2015-04-29 上传
2013-10-29 上传
2014-11-14 上传
weixin_40452768
- 粉丝: 0
- 资源: 1
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载