美文网首页
OC中的分类与扩展

OC中的分类与扩展

作者: 东也_ | 来源:发表于2018-11-18 11:45 被阅读13次

定义是什么就不说了...

他们能干嘛?

    分类:

    1、声明私有方法

    2、功能分解,当一个类很庞大的时候,可以使用分类分离一些功能。类似于如果一个函数里面有很长的代码的时候,就会将一些代码进行封装成其他函数进行调用。

    3、把framework的私有方法公开化。

    用法还是蛮多的,说一段实例:前两天我正在对公司项目的网络部分进行封装的时候,有一对象的函数在很多地方都用过了,但是后来发现这个方法,是需要根据环境进行不同方法的调用的。怎么办呢?我一不想改人家的封装,二是不想一个个去改。这个时候就用到了分类(这个分类当然就是针对那个类),在分类中重写load方法,用runtime将自己定义的方法和原对象方法进行交换,这样我就能在里面处理我自己的逻辑了。不过这种方法还是少用为好.....

扩展:

    1、声明私有属性

    2、声明私有方法

    3、声明成员变量

他们的区别是什么?

分类特点:

    1、运行时决议 ,就是在运行时才会为宿主类拼接内容

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

    3、可以添加实例方法、类方法、协议、属性(并不是实例变量 使用关联对象)

    ·多个分类的有同名方法,最后编译的方法会生效,因为源码中在添加方法的时候是倒序遍历的;

    ·分类方法会覆盖父类方法,其实覆盖并不是真正的覆盖,原类中的方法指针还是在的,可以通过IMP指针进行原类的方法调用。

扩展特点:

    1、编译时决议

    2、只能够声明,只能在宿主类中实现,一般都是放在宿主类的.m文件中。

    3、不能够为系统类添加扩展

怎样为分类添加成员变量?

    设计的方法有三个:

    //关联对象

    voidobjc_setAssociatedObject(id object, constvoid*key, id value, objc_AssociationPolicy policy)

    //获取关联的对象

    id objc_getAssociatedObject(id object, constvoid*key)

    //移除关联的对象

    voidobjc_removeAssociatedObjects(id object)    

 为分类添加的属性到底添加到哪了? 

   关联对象是由AssociationsManager全局单例进行管理 并在AssociationsHashMap存储,也就是所有对象的关联对象内容都放在了一个容器中。

 AssociationsManager -> AssociationsMap(key(selector) , value)-> AssociationsHashMap(key(object), value) 

相关文章

  • iOS中分类和继承的区别

    在OC中,扩展一个类的方式有两种:继承与分类。 继承与分类最大的区别是,一般情况下,分类不能扩展属...

  • OC中的分类与扩展

    定义是什么就不说了... 他们能干嘛? 分类: 1、声明私有方法 2、功能分解,当一个类很庞大的时候,可以...

  • Swift5.0 - day7-扩展、访问控制、内存管理

    一、扩展(Extension) 1.1、扩展介绍Swift中的扩展,有点类似于OC中的分类(Category)扩展...

  • 分类、类扩展与继承

    在OC中,扩展一个类的方式有两种,继承和分类。 分类(Category) 概念 分类(Category),是OC中...

  • iOS-Swift-扩展

    1. 扩展(Extension) Swift中的扩展,有点类似于OC中的分类(Category) 扩展可以为枚举、...

  • [Swift5.1] 18-扩展

    扩展(Extension) Swift中的扩展,有点类似于OC中的分类(Category) 扩展可以为枚举、结构体...

  • 扩展

    扩展(Extension) Swift中的扩展,有点类似于OC中的分类(Category) 扩展可以为枚举、结构体...

  • Swift扩展&协议&访问控制

    一、扩展 1、扩展简介: Swift中的扩展,类似于OC中的分类(Category)。 2、扩展可以为枚举、结构体...

  • swift扩展

    扩展 Swift中的扩展,有点类似于OC中的分类(Category) 扩展作用 扩展可以为枚举、结构体、类、协议添...

  • 分类、类扩展的区别

    分类、类扩展的区别 分类(Category):概念分类(Category)是OC中的特有语法,它是表示一个指向分类...

网友评论

      本文标题:OC中的分类与扩展

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