浅看OC中Category 分类\类别

本文详细介绍了Objective-C中的类别(Category)概念及其应用。类别允许开发者在不修改原始类的前提下扩展类的功能,并且能够有效地组织大型项目中的代码,便于多人协作开发与后期维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*Category作用:

 1.在不修改原有类的基础上增加新的方法

 2.一个庞大的类可以多模块开发

 3.一个庞大的类可以有多个人编写,利于团队合作

 4.便于维护

 Category目的

 1.对现有类进行扩展

 2.作为子类的替代手段

 3.对类中的方法进行归类

 Category步骤

 1.声明

 格式:@interface 要扩展的类 (类名)@end

 2.实现

 格式:@implementation要扩展的类 (类名)@end

 3.调用

 导入分类,直接用,不能写属性,只是增加新的方法

 Category注意事项:

 1.在分类中可以写@property,但是无法生成属性,只能使用set和get方法,

 2.可以用原有类的属性

 3.当原有类的方法和分类的方法同名时,优先调用分类的

 4.如果多个分类中方法同名,调用最后编译的  项目-->Build phasea--->compile sources,

 

 */

#import <Foundation/Foundation.h>

@interface Person : NSObject

-(void)run;

@end

@implementation Person

-(void)run{

    NSLog(@"running");

}

@end

@interface Person (base)                   //@interface 要扩展的类 (类名)@end

-(void)eat;

-(void)run;

@end

@implementation Person (base)    // @implementation要扩展的类 (类名)@end

-(void)eat{

    NSLog(@"eating");

}

-(void)run{

    NSLog(@"running!running!running!");

}

 

@end

@interface Person (work)

-(void)walk;

-(void)run;

@end

@implementation Person (work)

-(void)walk{

    NSLog(@"walking");

}

-(void)run{

    NSLog(@"running!running!");

}

 

@end

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        Person *p=[Person new];

        [p run];//当原有类的方法和分类的方法同名时,优先调用分类的;如果多个分类中方法同名,调用最后编译的

        /*

         案例运行结果:

         2016-01-24 16:01:50.277 Category分类[891:26287]running!running!

         2016-01-24 16:01:50.279 Category分类[891:26287] eating

         2016-01-24 16:01:50.279 Category分类[891:26287] walking

         Program ended with exit code: 0

         */

        [p eat];

        [p walk];

    }

    return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值