美文网首页
OC中语言特性相关

OC中语言特性相关

作者: TAsama | 来源:发表于2019-03-24 15:48 被阅读0次

1. 分类

你用分类都做了哪些事?
  • 声明私有方法
  • 分解体积庞大的文件
  • 把framework的私有方法公开
特点
  • 运行时决议(区别于扩展的第一个特点, 扩展是编译时决定)
  • 可以为系统类添加分类
分类中可以添加哪些内容
  • 实例方法
  • 类方法
  • 协议
  • 属性


    分类的结构体

    可以看到,分类结构体中会引用其实例对象,类对象,协议以及实例属性的列表。

在加载中,系统会读取镜像加载分类文件并关联到他的宿主类中。


系统加载分类

加载中,分类的方法会“覆盖”原生类的方法,这里的覆盖并不是真正意义上的覆盖,而是将原类的方法在内存指针中后移,而分类方法会前移。不同分类所添加的同方法名的方法也会根据编译顺序而互相覆盖,最后被编译的分类方法将会“覆盖”掉之前编译的分类。
由于编译时,分类所拥有的方法会根据分类的名称对应存储在一个数组中,所以相同的分类名会造成编译时的报错。

关联对象

能否给分类添加“成员变量”,答案是肯定的。
在分类中使用关联对象,可以使分类具有成员变量的效果。
关联对象由AssociationsManager管理并在AssociationsHashMap储存。
所有对象的关联内容都在同一个全局容器中。

关联对象存储关系
关联对象保存了需要关联实例的值,和引用规则,并使用键Key来指向关联对象,被关联对象作为key又指向了他自身的关联表。

2. 扩展(Extension)

一般用扩展做什么?
  • 声明私有属性
  • 声明私有方法
  • 声明私有成员变量
特点
  • 编译时决议
  • 只以生命的形式存在,多数情况下寄生于宿主类的.m中
  • 不能为系统类添加扩展

3. 代理

比较简单,一图流


代理

4. 通知

  • 是使用观察者模式来实现的用于跨层传递消息的机制
  • 传递方式为一对多
如何实现通知机制?

可以使用map的方式,Key为通知名称,Value为注册了通知的对象模型,模型中包括了通知的监听者对象,以及监听通知的SEL,监听通知的object参数
一图流:


通知

5. KVO

  • KVO是Key-value observing的缩写
  • KVO是Objective-C对观察者设计模式的又一实现。
  • Apple使用了isa混写来实现KVO

这里提到的isa混写模式就是指,注册KVO的时候,系统会动态创建一个被观察对象的子类,然后令被观察对象的isa指针指向该子类,在该子类中重写了setter方法。这样,当原对象属性被修改时(基于KVC的修改),就会调用setter方法,然后通知观察者。


KVO
如何实现手动KVO?
- (void)setValue:(id)obj {
  [self willChangeValueForKey:@"keyPath"];
  [super setValue:obj];
  [self didChangeValueForKey:@"keyPath"];
}

6. KVC

先看图


KVC系统调用流程

可以看到,系统先回盘对有没有对应setter getter方法,如果有则直接执行,如果没有则判断有没有对应的实例变量,如果有则执行实例变量的赋值,没有则会抛出异常。

Accessor Method方法包括
  • <getKey>
  • <key>
  • <isKey>
Instance var包括了
  • _key
  • _isKey

相关文章

  • OC中语言特性相关

    1. 分类 你用分类都做了哪些事? 声明私有方法 分解体积庞大的文件 把framework的私有方法公开 特点 运...

  • 面试总结

    1、OC是一门面向对象语言,但是它既有静态语言的特性,又有动态语言的效率。OC中的动态特性体现在OC中的RunLo...

  • iOS面试

    目录 UI视图相关 存储相关 OC 语言特性相关 Runtime相关 内存管理相关 Block相关 多线程相关 R...

  • OC语言特性相关

    1. 分类-category 如何使用声明私有方法分解体积庞大的类文件把Framework的私有方法公开等 分类的...

  • 我理解的runtime

    OC Runtime 对OC的理解与特性 OC是一门面向对象语言,既有静态语言的特性(C++),又有动态语言的特性...

  • 面试题之 OC

    OC语言的特性? ①OC 语言是 C 语言的一个超集,在 C 的基础上添加了面向对象的特性;②OC 语言与 Jav...

  • 面试总结

    OC的理解与特性 . OC是一门面向对象的语言,三大特性:封装 继承 多态。静态语言特性(C++),动态语言的效率...

  • 第一章:熟悉OC

    OC语言特性:-1. OC是在C的语言基础上添加了面向对象特性。 -2. OC与C++,JAVA等面向对象的语言类...

  • ios基础知识MS2

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

  • 知识点总结1

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

网友评论

      本文标题:OC中语言特性相关

      本文链接:https://www.haomeiwen.com/subject/wwsuvqtx.html