• 【分类的基本使用 Objective-C语言】


    前言

    Objective-C语言里的分类,也有人称为类别,也有人称为类目,到底是什么东西?
    在国外,只有一种叫法:category

    一、category是个什么东西?

    有这么一种情况,我写个类,这个类里面,可能会有很多的成员,也就是很多的方法,例如,写1个学生类,类中有很多个方法,比如,有以下这么多方法:
    1)吃
    2)喝
    3)拉
    4)撒
    5)睡
    6)学习
    7)敲代码
    8)写书
    9)玩儿游戏:Dota、LOL、CF
    10)爬山
    11)跑步
    12)游泳
    13)踢足球
    14)打篮球

    二、如果将这些方法都写在同1个类模块中,1个模块就是指1个.h文件和1个.m文件。当然完全是可以的,但是如果全都写在1个模块当中,就会显得很臃肿。不好管理,后面维护的时候,不好维护。

    1.默认情况下,1个类独占1个模块,这个时候,将所有的成员都写在这1个模块当中,就很难管理,我们的想法:那么我们能不能让1个类占多个模块呢,将功能相似的方法定义在同一个模块里面,这样的好处:方便维护和管理

    2.如何将1个类分成多个模块,分类就隆重登场了

    3、分类,顾名思义:把类分开,将1个类分成多个模块

    4、如何把1个类分成多个模块呢:如何为1个类添加分类,你要来个分类,首先要有1个本类,我们来给Student类添加1个分类,让Student类占两个模块,点一下Target,右键,点1下New File ,选择Objective-C File ,点击Next,文件的类型,File Type选择Category,然后为这个分类取个名字吧,例如test,你这个分类是要把哪个类分开,Student类,那就在Class里面写上Student,点击Next,点击Create

    5、这时候,又出来1个模块,也就是又出现1个.h文件和1个.m文件,有几个特点:a 这个模块的文件名是:本类名 + 分类名.h,本类名 + 分类名.m

    6、添加的分类也分为声明和实现,声明的语法:

    @interface 本类名 (分类名)

    @end

    后面加个小括号,代表什么意思,代表并不是要创建1个Student类,而是为这个已经存在的Student类,添加1个分类。这个分类的名字叫什么呢,叫test,为什么要为分类取个名字呢,因为我们说过,1个类是不可以分成多个模块啊,也就是说,我可以为这个Student类添加2个分类,添加3个分类,添加4个分类,为了区分每1个分类呢,所以每1个分类要取个名字。

    7、@interface 本类名 (分类名)代表不是新创建1个类,而是对已有的类添加1个分类,小括弧中写上这个分类的名字,因为1个类可以添加多个分类,为了区分每1个分类,所以分类要取名字。这是分类的声明

    8、分类的实现:@implementation Student (test)这是实现的谁呢,实现Student分类的test分类,并不是去实现Student类

    9、怎么去理解这两个模块:Student.h和Student.m,Student+test.h和Student+test.m,类,有几个,Student类只有1个,只不过这个Student类,它屁股大,占了几个模块,占了2个模块,这个时候我不管是在Student里面写东西,还是在Student+test这个分类里面写东西,其实都是谁的,都是Student类的。

    三、分类的使用:

    1、例如,有下面这样1个Student类:

    #import

    @interface Student : NSObject
    – (void)haha;
    @end

    #import “Student.h”

    @implementation Student
    – (void)haha
    {
    NSLog(@“哈哈。。。”);
    }
    @end

    2、还有下面这样1个分类:Student+test

    #import “Student.h”

    @interface Student (test)
    – (void)hehe;
    @end

    #import “Student+test.h”

    @implementation Student (test)
    – (void)hehe
    {
    NSLog(@“呵呵。。。”);
    }
    @end

    3、在main.m文件中:

    #import
    #import “Student.h”
    #imporlt “Student+test.h”
    int main(int argc, const char * argv[])
    {
    Student *s1 = [Student new];
    [s1 haha];
    [s1 hehe];//如果你要访问分类的成员,那么就要把这个分类的头文件引进来:Student+test.h
    return 0;
    }

    4、如果要访问分类中定义的成员,就要把分类的头文件引进来

    5、再来个分类:@interface Student (suiBian)

    @interface Student (suiBian)
    – (void)taiSuiBian;
    @end

    @implementation Student (suiBian)
    – (void)taiSuiBian
    {
    NSLog(@“嘿嘿。。。”);
    }
    @end

    这时候,在main.m文件中,就要把这个分类的头文件引进来
    #import
    #import “Student.h”
    #import “Student+test.h”
    #import “Student+suiBian.h”
    int main()
    {
    Student *s1 = [Student new];
    [s1 haha];
    [s1 hehe];
    [s1 taiSuiBian];
    }

    6、到目前为止,你能体会到分类的作用是什么:就是将1个类分成多个模块

  • 相关阅读:
    vscode初次远程连接服务器报错解决
    SA实战 · 《SpringCloud Alibaba实战》第02章-专栏设计
    java之冒泡排序和选择排序和直接插入排序原理
    5、Mybatis的查询功能(必定有返回值)
    【infiniband】infiniband和RDMA
    剪辑的视频太大怎么办?一分钟学会压缩视频
    项目管理软件dhtmlxGantt配置教程(六):编辑器的类型
    计算机毕业设计Javaweb高校车辆调度系统设计与实现(源码+系统+mysql数据库+lw文档)
    A+B 输入输出练习I(c++基础)
    基于深度学习的中文情感分析系统python flask
  • 原文地址:https://blog.csdn.net/madoca/article/details/126533265