Objective - C基础: 第四天 - 4.类别的基本认识之一

在我们开发中, 如果要给一个类扩充一些方法, 那么我们应该会选择使用继承, 但问题来了, 如果是使用继承, 那么我们就又要创建对象, 写更多的代码, 更加的麻烦了, 而类别(Category)就可以为我们解决这一类的问题.




下面让我们来一起来看看例子:

#import <Foundation/Foundaiton.h>

@interface Person : NSObject
- (void)test;
@end

@implementation Person
- (void)test
{
    NSLog(@"调用了test方法");
}
@end

上面就是我们平常所定义的一些方法, 如果我们需要在这基础上添加一些方法, 但不能去修改原来类的代码, 那么就可以使用类别来添加:



类别的命名规范:

类名+(分类名称)

分类名称可以是人名也可以是其他, 按照个人喜好, 下面就是使用类别的例子:

@interface Person (XMN)
@end

@implementation Person (XMN)
@end

在.h文件中, 我们是会看到#import "Person.h", 在.m文件了会看到#import "Person+XMN", 在.h文件中的引用头文件是告诉编译器, 我们是给什么类名添加类别, 而在.m文件的引用头文件, 是告诉编译器, 我们这个类别名是什么.



完整的例子:

#import <Foundation/Foundaiton.h>

@interface Person : NSObject
- (void)test;
@end

@implementation Person
- (void)test
{
	NSLog(@"调用了test方法");
}
@end


@interface Person (XMN)
- (void)cry;
@end

@implementation Person (XMN)
- (void)cry
{
	NSLog(@"大声的哭");
}
@end

int main()
{
	Person *p = [[Person alloc]init];
	[p test];
	[p cry];

	return 0;
}



下面是在Xcode上的类别声明和实现:



如果要加多个类别, 那就继续添加, 这个不会影响原来的类, 反正会提高我们的团队合作.





注意:

1. 分类只能添加方法, 不能添加成员变量, 否则会报错.

2. 分类方法实现中是可以访问我们原来类的成员变量.

3. 当分类中的方法名与原来类的方法名相同, 那么就会执行分类中的方法, 而不会执行原来类的方法, 坏处是会覆盖原来类的方法, 会导致原来类的方法失效, 所以不建议写方法名重复.

4. 方法调用的优先级: 分类 ---> 原来类 --->父类

5. 如果在项目中有两个类别, 它们都有相同名字的方法, 最后显示出来的结果是最后参与编译的类别方法, 这个是由编译文件顺序所决定的. (在项目的Build Phases中可以查看)




好了, 这次我们就讲到这里, 下次我们继续~~~

posted @   背着吉他去流浪  阅读(162)  评论(0编辑  收藏  举报
编辑推荐:
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
点击右上角即可分享
微信分享提示