OC底层揭秘:语法、KVC+KVO、关联对象与block深入解析
需积分: 9 45 浏览量
更新于2024-07-18
收藏 7.02MB PPTX 举报
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进行高效编程。
114 浏览量
2021-10-10 上传
2021-10-14 上传
2022-06-16 上传
2021-10-14 上传
2022-01-07 上传
2021-10-08 上传
2013-04-28 上传
面壁者LOGIC
- 粉丝: 84
- 资源: 25
最新资源
- jdk-11.0.6_windows-x64_bin.exe
- 接近客户的技巧——电话接近客户的技巧
- apsiyon-test-study
- i-sport:本学期的微信小程序期末设计,一种为喜爱运动健身人士所设计的APP
- goit-js-hw-07
- taskboard-ui
- Impellent.Developer.Tools:我自己的开发者工具的集合
- umodel_win32.zip
- 新人衔接教育30天销售实务培训班主任手册
- FORTE11.rar
- elex:对网关列表执行选举速度检查,以找到最快的网址
- win10打印机安装软件,一键配置ip打印
- pta_sim:PTA模拟代码存储库
- archive.cheesits456.dev:我网站的旧版本
- hello-world
- 客户服务与经营