Objective-c - category: 分类的使用和注意

/*

 Objective-c - category: 分类的使用和注意

 

    当我们写一个类的时候,会涉及到一个类会有很多种方法.这个时候所有的方法都写在一个模块之中会显得很混乱,不好维护和管理.

 在这个时候我们就可以给这个类添加分类,将不同的方法写在不同的分类当中,一个类占多个模块,方便维护和管理.

 

    1> 分类的新建

        

        新建一个分类文件会产生.h声明与.m实现两个文件.

        

        文件名:本类名+分类名.h  本类名+分类名.m

 

    2> 分类的声明

    

        @interface 本类名 (分类名)

 

        @end

 

        表示不是新建了一个类,而是给已经存在的本类添加了一个分类.

 

    3> 分类的实现

 

        @implementation 本类名 (分类名)

 

        @end

 

        表示是给分类中的声明写实现


    4> 如何理解分类

 

        分类是本类的一部分.

 

        将一个类中的成员按一定的规则分在了多个模块当中.

 

    5> 分类的作用

 

        将一个类分成了多个模块.将不同的方法写在不同的模块当中,方便后期维护和管理.

 

    6> 分类的使用注意

 

        1,分类中只能增加方法,不能增加属性.

 

        2,分类中写@property只会生成setter/getter方法的声明,不会生成setter/getter方法的实现,也不会生成带有下划线的私有属性.

 

        3,本类中写在@interface中的属性在分类中可以直接访问,本类中的真私有属性即写在@implementation之中的属性,在分类中无法访问,可以使用对应的setter/getter方法访问.

 

        4,分类中的方法可以与本类中的方法同名,这个时候如果调用这个方法,会优先调用分类中的方法.如果多个分类中都有同名的方法,会优先调用最后编译的分类中的方法.

 

 如下代码:

 

 */

#import <Foundation/Foundation.h>


#pragma mark -

#pragma mark #import "YYPerson.h"

//声明

@interface YYPerson : NSObject


@property(nonatomic,strong)NSString *name;

@property(nonatomic,assign)int age;


- (void)run;


@end

//实现

@implementation YYPerson


- (void)run

{

    NSLog(@"我在跑步!");

}


@end

#pragma mark -

#pragma mark #import "YYPerson+YYStuday.h"

//声明

@interface YYPerson (YYStuday)


- (void)study;

//与本类同名的方法

- (void)run;


@end

//实现

@implementation YYPerson (YYStuday)


- (void)study

{

    NSLog(@"我在学习!");

}

//与本类同名的方法

- (void)run

{

    NSLog(@"我在跑步我是分类YYStudy中的run方法!");

}


@end

#pragma mark -

#pragma mark #import "YYPerson+YYPlay.h"

//声明

@interface YYPerson (YYPlay)


- (void)play;

//与本类同名的方法

- (void)run;


@end

//实现

@implementation YYPerson (YYPlay)


- (void)play

{

    NSLog(@"我在玩!");

}

//与本类同名的方法

- (void)run

{

    NSLog(@"我在跑步我是分类YYPlay中的run方法!");

}



@end


#pragma mark -

#pragma mark main函数

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

 

    //创建人类对象

    YYPerson *xiaoming = [YYPerson new];

    

    //调用方法

    [xiaoming run];//最后编译的run方法是分类YYPlayer中的.

    [xiaoming study];

    [xiaoming play];

    

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值