美文网首页将来跳槽用三方解析
iOS Extension详解,及与Category的区别

iOS Extension详解,及与Category的区别

作者: num_one | 来源:发表于2019-02-21 13:38 被阅读251次

    Category详解

    1、 什么是extension

    extension被开发者称之为扩展、延展、匿名分类。extension看起来很像一个匿名的category,但是extension和category几乎完全是两个东西。和category不同的是extension不但可以声明方法,还可以声明属性、成员变量。extension一般用于声明私有方法,私有属性,私有成员变量。

    2、 extension的存在形式

    category是拥有.h文件和.m文件的东西。但是extension不然。extension只存在于一个.h文件中,或者extension只能寄生于一个类的.m文件中。比如,viewController.m文件中通常寄生这么个东西,其实这就是一个extension:

    `@interface ViewController ()`
    
    `@end`
    

    当然我们也可以创建一个单独的extension文件,如下图:

    1055199-56cba3e296a4bf59.png 1055199-d6e6a0b1e95e4e80.png 1055199-753211c1b4ca69d6.png

    UIView_extension.h中声明方法:

    1055199-fe05e6b5e89e4d15.png

    导入UIView_extension.h文件进行使用:

    1055199-a392389b341fc944.png

    注意:extension常用的形式并不是以一个单独的.h文件存在,而是寄生在类的.m文件中。

    3、category和extension的区别 Category详解

    • extension可以添加实例变量,而category是无法添加实例变量。
      因为在运行期,对象的内存布局已经确定,如果添加实例变量就会破坏类的内部布局,这对编译型语言来说是灾难性的。

    • extension在编译期决议(就是类的一部分),category在运行期决议。
      extension在编译期和头文件里的@interface以及实现文件里的@implement一起形成一个完整的类,extension伴随类的产生而产生,亦随之一起消亡。

    • extension一般用来隐藏类的私有信息,无法直接为系统的类扩展,但可以先创建系统类的子类再添加extension。

    • category可以给系统提供的类添加分类。

    • extension和category都可以添加属性,但是category的属性不能生成成员变量和getter、setter方法的实现。

    👏👏👏欢迎大家加入群组(IT_大前端技术交流群),技术交流群
    
    IT_大前端技术交流群

    相关文章

      网友评论

        本文标题:iOS Extension详解,及与Category的区别

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