Objective-C面试深度解析:从基础到Runtime
需积分: 0 16 浏览量
更新于2024-06-30
收藏 385KB PDF 举报
"面试题整理,涵盖Objective-C基础与Runtime机制"
面试题涉及Objective-C的基础概念和Runtime机制,这是理解iOS开发的关键。以下是对这些知识点的详细解释:
1. **id、self、super的区别**
- `id`:是Objective-C的通用类型,可以指向任何Objective-C对象,表示未知类型的对象指针。
- `self`:在方法内部,`self`代表当前对象,它是一个指向调用该方法的对象的指针。
- `super`:在方法内部,`super`用于调用父类的方法,它也指向当前对象,但消息会被传递到父类的实现中。
2. **isa**:每个Objective-C对象都有一个隐藏的`isa`指针,它指向对象所属的类,用来确定对象可以响应哪些消息。
3. **Objective-C的ABI稳定性**:Objective-C通过在运行时解析消息传递,使用分类(categories)、协议(protocols)和动态加载(dyld)等特性来确保ABI(应用程序二进制接口)的稳定性。即使系统升级,旧的二进制代码也能与新的运行时环境兼容。
4. **OC中对象的内存布局**:通常包括对象头(包含`isa`指针和其他信息)、实例变量(ivar)和对齐填充。
5. **nil、Nil、null、NSNull的区别**
- `nil`:指向Objective-C对象的空指针,对于对象类型的指针,`nil`表示对象不存在。
- `Nil`:指向类的空指针,通常用于类对象的指针。
- `null`:C语言中的空指针,适用于所有类型的指针。
- `NSNull`:Objective-C中的特殊对象,用于表示“无值”或单个对象的“空值”。
6. **一个NSObject占用的内存**:通常情况下,一个空的`NSObject`实例占用的内存大小包括对象头(包含`isa`指针)和对齐填充。
7. **OC的类信息存放**:类信息存储在内存中的类结构体中,包括类名、超类、实例变量列表、方法列表等。
8. **Runtime相关知识点**:
- 对象、类对象、元类之间的关系:对象是实例,类对象是类的实例,元类是类的类对象,它们之间通过`isa`指针相互关联。
- `class_ro_t`和`class_rw_t`:前者表示只读部分,包含类的信息;后者表示可读写部分,如方法、属性、协议等。
- 内省方法:`class`、`objc_getClass`等,前者获取对象的类,后者获取指定名称的类。
- `objc_allocateClassPair`中的`pair`表示同时创建类和元类。
- `fastpath`、`slowpath`:编译器优化技术,`fastpath`用于快速路径,`slowpath`用于可能较慢的情况。
- `SideTables`:用于存储对象的额外信息,如弱引用表、关联对象等。
9. **消息转发机制**:当对象接收到无法处理的消息时,会经历完整的消息转发过程,包括`forwardingTargetForSelector`、`methodSignatureForSelector`、`forwardInvocation`等步骤。
10. **Objective-C的动态性**:Objective-C允许在运行时添加方法、改变类结构、动态加载类等,因此它是动态语言。
11. **unrecognized selector错误**:当发送一个对象不支持的消息时,会抛出这个错误。可以通过方法签名检查、遵循协议、异常处理等手段预防。
12. **添加实例变量**:编译后的类不能直接添加实例变量,但可以通过Runtime在运行时创建新类来实现。
13. **添加属性的影响**:添加属性会修改类的`class_rw_t`结构,增加属性的声明和实现信息。
14. **类方法与实例方法的区别**:类方法以`+`开头,作用于类本身;实例方法以`-`开头,作用于类的实例。
15. **运行时增加成员变量和属性**:运行时不能直接增加成员变量,但可以通过关联对象实现类似功能。可以添加方法实现属性功能。
16. **向nil对象发送消息**:发送消息给nil是安全的,不会引发异常,返回值通常是`nil`或0。
17. **hook方法**:可以使用Runtime的`method_exchangeImplementations`或Category来替换方法的实现,实现hook。
18. **SEL、Method、IMP**:`SEL`是方法选择器,标识方法;`Method`封装了方法的所有信息;`IMP`是方法的实现,是个函数指针,执行方法的实际代码。
以上内容涵盖了Objective-C的基础和Runtime的核心机制,对于iOS开发者来说,理解并掌握这些知识点至关重要。在面试或实际开发中,熟练运用这些知识能够解决许多问题。
2022-08-03 上传
2020-07-30 上传
2022-07-09 上传
2018-04-14 上传
2022-11-04 上传
2009-11-26 上传
2009-12-19 上传
高中化学孙环宇
- 粉丝: 16
- 资源: 338
最新资源
- Raspberry Pi OpenCL驱动程序安装与QEMU仿真指南
- Apache RocketMQ Go客户端:全面支持与消息处理功能
- WStage平台:无线传感器网络阶段数据交互技术
- 基于Java SpringBoot和微信小程序的ssm智能仓储系统开发
- CorrectMe项目:自动更正与建议API的开发与应用
- IdeaBiz请求处理程序JAVA:自动化API调用与令牌管理
- 墨西哥面包店研讨会:介绍关键业绩指标(KPI)与评估标准
- 2014年Android音乐播放器源码学习分享
- CleverRecyclerView扩展库:滑动效果与特性增强
- 利用Python和SURF特征识别斑点猫图像
- Wurpr开源PHP MySQL包装器:安全易用且高效
- Scratch少儿编程:Kanon妹系闹钟音效素材包
- 食品分享社交应用的开发教程与功能介绍
- Cookies by lfj.io: 浏览数据智能管理与同步工具
- 掌握SSH框架与SpringMVC Hibernate集成教程
- C语言实现FFT算法及互相关性能优化指南