根据给定的文件信息,以下是对“iOS 2018面试题”中涉及的知识点进行的详细解析: ### 技术基础知识 1. **Objective-C为何被称为动态语言:** - Objective-C作为一门面向对象的编程语言,其动态特性主要体现在运行时的能力上。在Objective-C中,可以通过`objc_msgSend`函数来发送消息给对象,这意味着可以在运行时决定对象执行的具体行为。 - 类别、协议、动态类型识别等特性进一步增强了Objective-C的动态性。 2. **MVC、MVVM与MVP模式详解:** - **MVC**(Model-View-Controller):模型负责数据处理和业务逻辑,视图用于展示数据,控制器作为桥梁连接模型和视图,负责处理用户交互。 - **MVVM**(Model-View-ViewModel):模型同样处理数据,视图展示数据,ViewModel负责数据绑定,使得视图与模型之间的通信无需通过控制器。 - **MVP**(Model-View-Presenter):与MVC相似,但Presenter承担了更多的职责,直接与视图交互,并控制视图的行为。 3. **代理(Delegate)与Block的区别:** - **代理**是一种设计模式,通常用于传递消息或事件,使用代理模式可以解耦组件,提高代码的灵活性和可维护性。 - **Block**(闭包)是一种可以直接在代码中定义的匿名函数,它可以捕获外部作用域中的变量,适合用于简单的回调或短小的任务处理。 4. **属性(Property)的概念及其组成部分:** - 属性是Objective-C中用于封装对象的实例变量的一种语法糖。属性包含四个部分:名称、类型、getter/setter方法名以及存储方式。 - 默认的属性关键字包括`nonatomic`(非原子)、`copy`(拷贝)和`strong`(强引用)等,分别用于指定属性的线程安全级别、对象拷贝行为及引用计数行为。 5. **NSString使用`copy`而非`strong`的原因:** - 使用`copy`关键字可以确保NSString对象不会被修改,从而保证字符串的不变性,这对于程序的稳定性和安全性非常重要。 6. **可变集合类与不可变集合类的区别:** - 可变集合(如`NSMutableArray`)允许在运行时添加、删除或修改元素,而不可变集合(如`NSArray`)一旦创建就不能更改,只能读取其中的元素。 - `copy`和`mutableCopy`方法用于创建新的集合实例。对于不可变集合,`copy`返回自身,`mutableCopy`返回可变版本;而对于可变集合,`copy`返回不可变版本,`mutableCopy`返回自身。 7. **IBOutlet与Weak的关系:** - `IBOutlet`用于将界面文件中的控件与代码中的变量关联起来。通常使用`weak`关键字,以防止内存泄漏和循环引用的发生。 8. **`nonatomic`与`atomic`的区别:** - `nonatomic`表示非原子性操作,即不会保证线程安全,性能更高。 - `atomic`则保证了线程安全,但在多线程环境中可能会降低性能。需要注意的是,`atomic`并不能保证绝对的线程安全。 9. **UICollectionView自定义Layout的实现方法:** - 通过继承`UICollectionViewLayout`类并重写关键方法(如`prepare()`, `layoutAttributesForElementsInRect:`等),可以实现自定义的布局。 10. **StoryBoard开发界面的弊端及其避免方法:** - 故事板虽然便于可视化编辑,但在大型项目中可能导致故事板文件过于庞大,难以维护。 - 可以通过合理划分故事板文件、结合代码实现复杂的布局逻辑等方式来减轻这些问题。 11. **进程与线程的区别:** - **进程**是操作系统分配资源的基本单位,每个进程有自己的地址空间。 - **线程**是进程内的执行单元,同一进程中的线程共享相同的内存空间。 12. **同步与异步的区别:** - 同步意味着当前线程需要等待某个操作完成才能继续执行。 - 异步则是指线程不必等待操作完成即可继续执行其他任务。 13. **并行与并发的区别:** - **并行**指的是多个任务同时在不同的处理器核心上执行。 - **并发**则是指在同一时间间隔内,多个任务看似同时执行,但实际上是由单一处理器核心交替执行。 14. **线程间通信方式:** - 包括使用GCD的信号量、barrier块、dispatch group等。 15. **数据持久化方案:** - 常见的数据持久化方案包括Core Data、SQLite数据库、Property List、归档等。 16. **AppDelegate方法的作用:** - AppDelegate中的方法用于处理应用生命周期的不同阶段,例如启动、进入前台、进入后台等。 17. **NSCache与NSDictionary的比较:** - `NSCache`提供了一种基于LRU算法的缓存机制,能够自动释放旧的数据以节省内存。 18. **Designated Initializer的使用注意事项:** - 设计者初始化器是类的推荐初始化器,应该用来确保所有必需的实例变量都被正确设置。 19. **Runtime机制概述:** - 运行时机制允许在运行时修改类的行为,包括交换方法、动态添加属性等。 20. **类别(Category)的概念及其用途:** - 类别是在已有的类上添加新的方法,用于扩展已有类的功能。 21. **实现description方法的效果:** - 实现`description`方法可以让对象以字符串的形式打印出来,方便调试。 22. **Objective-C内存管理机制:** - Objective-C使用引用计数机制来管理对象的内存,当对象的引用计数为0时会被自动释放。 以上对“iOS 2018面试题”的知识点进行了较为全面的解析,希望能对准备面试的开发者有所帮助。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助