OC(Objective-C)是一种面向对象的编程语言,广泛应用于iOS和MacOS开发中。本课程专注于讲解OC底层原理,包括关键概念如KVC(Key-Value Coding)、KVO(Key-Value Observing),以及一些重要的编程技术,如Category、load和initialize方法,关联对象,以及Objective-C对象的本质。 首先,让我们来理解Objective-C对象的基础。一个NSObject对象在系统中的内存占用是相当基础的。默认情况下,它由系统分配16个字节(在64位环境下,这可能因架构不同而略有差异),但实际使用空间仅为8个字节。这些内存被分为几个部分:其中isa指针是关键,它指向该对象所属的类或metaclass。对于实例对象,isa指向类对象;类对象的isa则指向其metaclass;而metaclass的isa指向基类的metaclass。 OC的类信息存储在类对象和metaclass对象中,分别包含了对象方法、属性、成员变量和遵循的协议等。类方法则存储在metaclass中。每个对象实例的成员变量值存储在其自身的实例空间内。 KVO的核心在于通过Runtime API实现动态代理。通过动态创建子类并让实例对象的isa指向新的子类,当属性值改变时,Foundation框架会调用`_NSSetXXXValueAndNotify`函数,触发`willChangeValueForKey:`、父类的setter方法,以及通知观察者执行`observeValueForKeyPath:ofObject:change:context:`方法。 手动触发KVO需要调用`willChangeValueForKey:`和`didChangeValueForKey:`方法,但直接修改成员变量本身不会自动触发KVO。然而,通过KVC修改属性时,确实会触发KVO机制,因为KVC的赋值和取值过程实际上是通过发送消息给对象进行的,这隐含了属性的更改,从而引发KVO通知。 Category是Objective-C中一种实用的设计模式,主要用于扩展已有的类的功能,但不改变其接口。Category在编译阶段被转换成名为`struct category_t`的结构体,存储分类的方法、属性等信息。当程序运行时,runtime会将Category的内容合并到类或metaclass中,实现在运行时动态添加行为。 与Category不同的是,Class Extension(通常在Swift中称为Swift的扩展)在编译时就已内嵌在类信息中,它提供了对已有类功能的增强,但不像Category那样在运行时动态添加。两者的主要区别在于时机和集成方式:Class Extension是在编译时静态链接,而Category则是运行时动态附加。 总结来说,本课程深入探讨了Objective-C的语法和底层原理,涵盖了对象内存布局、KVC和KVO的工作机制、Category的使用场景和实现原理,以及类扩展与Category的比较,帮助开发者更好地理解和利用Objective-C进行高效编程。
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/e934f99d9f854563b52be309dd40b368_bolted_snail.jpg!1)
- 粉丝: 65
- 资源: 25
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Vue实现iOS原生Picker组件:详细解析与实现思路
- Arduino蓝牙小车:参数调试与功能控制
- 百度Java面试精华:200页精选资源涵盖核心知识点
- Swift使用CoreData填坑指南:CoreData在Swift 3.0的变化
- 微距离无线充电器创新设计及其实验探索
- MTK Android平台开发全攻略:44步详解流程
- RecyclerView全面解析:替代ListView的新选择
- Android开发:自动适配中英文键盘解决方案
- Android调用WebService接口教程
- Android开发:BitmapUtil图片处理全解析与实例
- Android多线程断点续传实现详解
- PCA算法在人脸识别会议签到系统中的应用
- EventBus 3.0:Android事件总线详解与实战应用
- Android FileUtil:全面解析文件操作实用技巧与实例
- RecyclerView添加头部和尾部实战教程
- Android实现微博滑动固定顶部栏实战与优化
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)