3.Objective -C Category-分类

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

使用注意:
 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、付费专栏及课程。

余额充值