Objective-C:Category分类
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
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13