• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Objective-C:Category分类

武飞扬头像
aYErA丶
帮助5

Objective-C之Category(分类)

假设有这样一个场景,我们需要定义一个Person类,这个类包含很多方法,如:吃饭、喝水、打LOL、看书、敲代码、唱歌、跳舞、rap、游泳、爬山、玩Switch…………
看起来是不是有点乱呢🤔,如果把这些方法都在一个类里实现,时间久了,会导致代码非常的“臃肿”,后期难以维护和管理。默认情况下,一个类独占一个模块,那我们是不是可以让一个类占多个模块,并按功能分类,将相似类目的方法放到一个模块中呢?答案是可以的,这时就需要本文的主角----category
我们试着将上述的方法进行分类,如下:

学习:看书、敲代码
文娱:唱歌、跳舞、rap
生存:吃饭、喝水
运动:爬山、游泳
游戏:打LOL、玩Switch

这样看起来是不是更清晰了呢😜,接下来步入主题👇

如何创建一个分类

步骤一:
学新通

步骤二:
学新通

步骤三:
学新通

最终我们的分类就创建好啦
学新通

代码

学习分类
CPerson Study.h

@interface CPerson (Study)
- (void)code;
- (void)read;
@end

CPerson Study.m

@implementation CPerson (Study)

- (void)code {
    NSLog(@"敲代码");
}

- (void)read {
    NSLog(@"读书");
}

@end

生存分类
CPerson Live.h

@interface CPerson (Live)
- (void)eat;
- (void)drink;
@end

CPerson Live.m

@implementation CPerson (Live)

- (void)eat {
    NSLog(@"吃饭");
}

- (void)drink {
    NSLog(@"喝水");
}

@end

主函数

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        CPerson *ps = [[CPerson alloc] init];
        // 生存相关方法
        [ps eat];
        
        // 学习相关方法
        [ps code];
    }
    return 0;
}

控制台打印

2022-03-02 00:16:01.149302 0800 20220301_OC_category[2124:91649] 吃饭
2022-03-02 00:16:01.149491 0800 20220301_OC_category[2124:91649] 敲代码
注意:

1.分类中只能增加方法,不能增加属性,否则会编译报错。
学新通

2.分类中可以写@property,但是只会生成getter和setter的声明,不会生成getter和setter的实现。编译可通过,但调用会崩溃。

编译
学新通

调用
学新通

3.在分类的方法中不能直接访问本类的私有属性,但是可以用setter、getter方法访问。

本类学新通

分类中直接访问
学新通
分类通过setter、getter访问
学新通
4.当分类中有和本类重名的方法,优先调用分类的方法,即使没有引入分类的头文件。
如果多个分类中都有相同的方法,优先调用最后编译的方法

本类
学新通

分类
学新通
调用
学新通

控制台打印

2022-03-02 00:57:31.792788 0800 20220301_OC_category[2751:130371] 我是分类
总结

Q:什么时候使用分类?
A:当一个类中的方法多而杂时,就是用分类。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhiibk
系列文章
更多 icon
同类精品
更多 icon
继续加载