美文网首页
类 *分类* 类扩展

类 *分类* 类扩展

作者: 竹屋听雨 | 来源:发表于2020-01-14 14:53 被阅读0次

分类:Category

iOS中的分类主要的作用就是为类提供扩展,增加一些方法。但是只能添加方法 不能添加属性?
我们查看category的定义:
在分类的结构体里面并没有属性列表,有方法列表,原则上来说 它只能添加方法,不提供添加属性。

typedef struct objc_category *Category;

struct objc_category {
    char * _Nonnull category_name                            OBJC2_UNAVAILABLE;//分类名称
    char * _Nonnull class_name                               OBJC2_UNAVAILABLE;//原类的名字
    struct objc_method_list * _Nullable instance_methods     OBJC2_UNAVAILABLE;//实例方法列表
    struct objc_method_list * _Nullable class_methods        OBJC2_UNAVAILABLE;//类方法列表
    struct objc_protocol_list * _Nullable protocols          OBJC2_UNAVAILABLE;//分类实现协议
}                                                            OBJC2_UNAVAILABLE;
分类的作用

1:可以为类分为多个模块,方便管理
2:扩展一个类,给原来的类添加方法,特别是扩展系统自带的类或者一些第三方框架。
注意:
1:分类只能添加方法,不能添加属性。
2:分类中可以写成@property,但是不会生成setter getter方法
3:分类中可以访问原来的成员变量,但是只能访问@protect @public形式的变量,如果想要访问本类的私有变量,分类和子类一样,只能通过方法来访问。
4:如果分类中和原有类中有同名的方法,会优先调用分类中的方法,就是忽略原来的方法
5:如果多个分类中都有和原来的类中同名 的方法,那么调用该分类中的方法的时机有编译器来决定,编译器会执行最后一个参与编译的分类的种的方法
可以在 TARGETS->Build Phases ->Compile Sources 修改(注意执行顺序是从上到下的)

类扩展:Extension

Extension(类扩展)是Category的一个特例;
类扩展没有名字,只有声明没有实现,与原类共享方法实现。是category一个特例,有时候也可以称为匿名分类,他的作用就是为一个类添加私有的成员变量和方法。

相关文章

  • 类 *分类* 类扩展

    分类:Category iOS中的分类主要的作用就是为类提供扩展,增加一些方法。但是只能添加方法 不能添加属性?我...

  • iOS---12-load_images&类拓展&关联对象原理分

    类扩展 分类 类扩展就是一个匿名的分类.类扩展在编译的时候就将数据写入到类的信息中,也就ro中 分类编译底层是st...

  • iOS基础问答面试题连载(一)

    1.简单的描述下类扩展和分类的区别?(说2点) 类扩展没有名字,分类有名字 类扩展可以为某个类增加额外的属性、成员...

  • iOS基础问题面试题附带答案(一)

    1.简单的描述下类扩展和分类的区别?(说2点) 类扩展没有名字,分类有名字。类扩展可以为某个类增加额外的属性、成员...

  • 类扩展&分类

    1、类扩展,extension,可以扩展属性(成员变量) @interface LYViewController(...

  • 分类(categroy),类扩展(Extension)

    分类、类扩展区别 分类-运行时决议,类扩展-编译时决议,类扩展是在编译阶段被添加到类中,而类别是在运行时添加到类中...

  • 小码哥底层原理笔记:Catgory的本质

    首先我们要明白什么是类扩展class extension?像下面这样就是类扩展 类扩展和分类Catgory一样都是...

  • 类的加载(三)

    类扩展 类扩展 VS 分类 category 专门用来给类添加新的方法 不能给类添加成员属性,添加了成员变量,也...

  • iOS Class Extension(类扩展)与Class C

    Class Extension(类扩展) Class Category(分类)

  • 面试题集锦1(更新)

    1.类扩展和分类的区别 类扩展:没有名字可以为某个类增加额外的属性、成员变量和方法 分类:有名字只能扩充方法,不能...

网友评论

      本文标题:类 *分类* 类扩展

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