美文网首页
OC 语言相关

OC 语言相关

作者: 萝卜丝巾 | 来源:发表于2020-08-10 10:52 被阅读0次


引文:


  1. 分类
  2. 关联对象
  3. 扩展
  4. 代理
  5. 通知
  6. KVO
  7. KVC
  8. 属性关键字

分类(Category)

作用:

  1. 声明私有方法

  2. 拆分不同功能的类文件

  3. Framework的私有方法公开

特点:

  1. 运行时决议的

  2. 可以为系统类添加分类

  3. 分类添加的方法可以"覆盖"原类方法

  4. 同名分类方法谁生效取决于编译顺序

  5. 名字相同的分类会引起编译报错

添加内容:

  1. 实例方法

  2. 类方法

  3. 协议

  4. 属性 (runtime运行时添加)

image.png

分类的加载调用栈

image.png

eg: images 指的是镜像, 不是图片

分类的实现机制都是在remethodizeClass 方法中进行中

image.png
扩展(Extension)

特点:

  1. 编译时决议

  2. 只声明不实现(一般寄托于宿主类)

  3. 不能为系统类添加扩展

KVO

简介:

  1. KVO是Key-value observing 的缩写

  2. KVO是OC对观察者设计模式的实现

  3. KVO主要是通过runtime 实现的 (isa-swizzling isa混写)

注意:

  1. 使用setter 方法改变值kvo才会生效

  2. 使用setValue:forKey:改变值kvo才会生效

  3. 直接修改成员变量的值kvo不会生效(要手动实现方法)

    Eg: 手动触发条件 willChangeValueForKey didChangeValueForKey

(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

image.png
KVC

简介:

  1. KVC是Key-value coding 的缩写
[self valueForKey:<#(nonnull NSString *)#>];

[self valueForKeyPath:<#(nonnull NSString *)#>]

[self valueForUndefinedKey:<#(nonnull NSString *)#>]

[self setValue:<#(nullable id)#> forKey:<#(nonnull NSString *)#>];

[self setValue:<#(nullable id)#> forKeyPath:<#(nonnull NSString *)#>]

[self setValue:<#(nullable id)#> forUndefinedKey:<#(nonnull NSString *)#>]

valueForKey 实现机制

image.png

Accessor Method 查找类型 : <getKey> <key> <isKey>

Instance Var 查找类型: _key _isKey key isKey

setValue:forKey: 实现机制

image.png

相关文章

  • OC 语言相关

    引文: 多线程相关 OC 语言相关 内存管理相关 UI视图相关 RunLoop相关 分类 关联对象 扩展 代理 通...

  • 多线程相关

    引文: 多线程相关 OC 语言相关 内存管理相关 UI视图相关 RunLoop相关 GCD NSOperation...

  • 网络相关

    引文: 多线程相关 OC 语言相关 内存管理相关 UI视图相关 RunLoop相关 HTTP协议 HTTPS与网络...

  • iOS面试

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

  • 内存管理相关

    引文: 多线程相关 OC 语言相关 内存管理相关 UI视图相关 RunLoop相关 内存布局 内存管理方案 数据结...

  • RunLoop相关

    引文: 多线程相关 OC 语言相关 内存管理相关 UI视图相关 RunLoop相关 概念 数据结构 事件循环 Ru...

  • OC语言特性相关

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

  • iOS大纲

    一、语言主要开发语言:swift、oc相关开发语言:c、c++、js、汇编、Linux常用命令、shell脚本 二...

  • OC中语言特性相关

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

  • 总结:八天学会OC语言(上)

    day1 OC语言day01-01OC的简介(附C语言知识点回顾)OC语言day01-02C和OC的对比OC语言d...

网友评论

      本文标题:OC 语言相关

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