3.Objective -C Category-分类

理解Objective-C中类与分类的区别及应用
本文深入探讨了Objective-C中的类与分类之间的区别,并通过具体实例展示了如何在实践中灵活运用分类来扩展已有类的功能。文章还强调了分类在方法调用优先级上的特性,帮助开发者在类设计和代码维护上做出更明智的选择。

分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法

使用注意:
 1.分类只能增加方法,不能增加成员变量
 2.分类方法实现中可以访问原来类中声明的成员变量
 3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用
 4.方法调用的优先级:分类(最后参与编译的分类优先) --> 原来类  --> 父类
 

下来如果需要扩展Person类的话:

//////////////////Person.h///////////////////
#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    int _age;
}
@property int age;
- (void)test;
@end

//////////////////Person.m///////////////////
#import "Person.h"

@implementation Person
- (void)test
{
    NSLog(@"Person-test");
}
@end

增加类别Category1和Category2,其对应的文件名命令规则为‘Person+Category1.h’,‘Person+Category1.m’,以此类推。

Person+Category1:

//////////////////////Person+Category1.h/////////
#import "Person.h"

@interface Person (Category1)
- (void)study;
@end

//////////////////////Person+Category1.m/////////
#import "Person+Category1.h"

@implementation Person (Category1)
- (void)study
{
    NSLog(@"学习-----%d", _age);
}

- (void)test
{
    NSLog(@"Person (Category1)-test");
}
@end


Person+Category2:

//////////////////////Person+Category2.h/////////
#import "Person.h"

@interface Person (Category2)
- (void)study;
@end

//////////////////////Person+Category2.m/////////
#import "Person+Category1.h"

@implementation Person (Category2)
- (void)study
{
    NSLog(@"学习2-----%d", _age);
}

- (void)test
{
    NSLog(@"Person (Category2)-test");
}
@end


main.m

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Person+Category1.h"
#import "Person+Category2.h"

int main()
{
    Person *p = [[Person alloc] init];
    //p.age = 10;

    // 优先去分类中查找,然后再去原来类中找,最后再去父类中找
    [p test];
    [p study2];

    return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值