美文网首页
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 语言相关

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