分类的理解及应用

来源:互联网 发布:svd求逆矩阵 编辑:程序博客网 时间:2024/04/28 13:57

,分类的概念及使用流程:

1,什么是分类?

    分类,就是Category,OC特有的语法;

    Category有很多种翻译: 分类 \ 类别 \ 类目 (一般叫分类)

2,分类的作用:

    (1),对现有类进行扩展;

   (2),在不修改原有的类的基础上增加新的方法;

3,分类的使用流程:

   先声明类别--->实现类别--->使用类别


,分类的声明和实现:

1,分类的声明:

    (1),分类的声明格式:

       @interface 待扩展的类名 (分类的名称)

      @end

   (2),.h文件中,声明分类:

       @interface ClassName (CategoryName)

       //只能在分类中添加方法

          NewMethod;

      //不能在分类中添加成员变量

       @end

   (3),分类声明格式的说明:

       1)新添加的方法必须写在 @interface @end之间

       2)ClassName 现有类的类名

       3)CategoryName 待声明的类别名称

       4)NewMethod 新添加的方法

2,分类的实现:

    (1),分类的实现格式:

          @implementation 待扩展的类(分类的名称)

          @end

   (2),.m文件中实现分类:

          @implementation ClassName(CategoryName)

              NewMethod

           @end

   (3),分类实现格式说明:

          1)新方法的实现必须写在@implementation@end之间

          2)ClassName 现有类的类名

          3)CategoryName 待声明的类别名称

          4)NewMethod 新添加的方法的实现

3,分类的使用:

    (1),导入分类的头文件;

   (2),使用类别中的方法,和使用一般成员方法一样;需要创建对象,然后用[]调用类别中的方法即可;


,分类的使用注意事项:

    1,分类只能增加方法, 不能增加成员变量、也不能使用@property;*****

   2,分类可以访问原来类中的成员变量;

   3,如果分类和原来类出现同名的方法, 优先调用分类中的方法, 原来类中的方法会被忽略;*****

   4,如果多个分类中有同名的方法,执行哪个分类的方法,取决于编译的顺序,最后编译的那个分类中的方法会执行;


分类的实现:
#pragmamark main.m

#import

#import"Person.h"

#import"Person+playGame.h" //分类的声明的头文件

#import"Person+study.h"

#import"Student.h"

intmain(intargc,constchar* argv[]) {

   @autoreleasepool {

     Person*p =[Personnew];

       [p eat];

       [p run];

       [pplayLol];

       [p playDota];

       [pstudyC];

       [p studyIOS];

   }

    return0;

}


#pragmamark Person.h

#import

@interfacePerson :NSObject

//person类原有的属性和方法

@end

//Person类增加新的方法

//声明一个分类

@interfacePerson (base)

    //

    -(void)eat;

    //

    -(void)run;

@end


#pragmamark Person.m

#import"Person.h"

//实现一个类别

@implementation Person(base)

//

-(void)eat{

    NSLog(@"人会吃东西");

}

//

-(void)run{

   NSLog(@"人会跑");

}

@end

@implementation Person

//类原有的方法的实现

@end


#pragmamark Person+playGame.h

#import"Person.h"

@interfacePerson(playGame)

//增加一个类别,类别名称playGame Person增加新的方法

-(void)playLol;

-(void)playDota;

@end


#pragmamark Person+playGame.m

#import"Person+playGame.h"

@implementationPerson(playGame)

-(void)playLol{

    NSLog(@"那人正在玩撸啊撸");

}

-(void)playDota{

    NSLog(@"那人正在玩刀塔");

}

@end


#pragmamark  Person+study.h

#import"Person.h"

@interfacePerson(study)

-(void)studyC;

-(void)studyIOS;

@end


#pragmamark Person+study.m

#import"Person+study.h"

@implementationPerson(study)

-(void)studyC{

    NSLog(@"那人正在学习C语言");

}

-(void)studyIOS{

    NSLog(@"那人正在学习IOS");

}

@end


#pragmamark Student.h

#import"Person.h"

@interfaceStudent : Person

@end


#pragmamark Student.m

#import"Student.h"

@implementation Student

@end



0 0
原创粉丝点击