Obiect-C之Category(类的拓展)

来源:互联网 发布:video.js ie8 编辑:程序博客网 时间:2024/06/13 21:31

在项目进行的时候,一个类已经被设计完成,但是可能因为某些小的功能需求,或者改动可能需要改动源码,如何能在不改动自己写或者是其他人写的源码来添加新的功能?当然继承是一个非常不错的方法,还有一个在Object-C中提供了一种方式来拓展该类(Category),使用该方法可以给它动态的添加业务需求,不需要改变源码,也不需要创建子类,非常方便!

下面看看category的简单实现方式:

现在我们有一个类叫Student类,该类有一个学习的方法:

@interface Student : NSObject

-(void)study;

  @end

 然后在实现文件中实现该类的study方法:

 @implementation Student 

-(void)study{

NSlog(@"该学生正在学习,请勿打扰!");

}

@end 

现在,假设我们的student已经被设计好了,但是突然需要让该学生具备一个吃饭的行为,那这个时候怎么办呢?我们可以在新建两个文件,分别 是Student+HelloWorld.h  和 Student+HelloWorld.m(这个实现文件格式就是如此)

当然也可以使用xcode工具给我们自己生成这两个文件,按Command+N,新建文件,选择Objective-C category方式创建类,这样Xcode会自动帮 你创建约定命名方式的文件,具体看图:


这里和平时新建类的时候不同,这里需要选择Object-C catrgory 。然后next

注意,这里在Category on这里选择你要拓展的那个类,这里是Student类。点击next就ok了。

        首先,新建好 的文件中看.h文件代码实现

  @interface Student (HelloWorld)  

-(void)eat;//需要拓展的吃饭方法

    @end

    @implementation Student (HelloWorld)

-(void) eat{

NSlog(@"这个是拓展学生吃饭的方法!");

}

    @end

最后在main函数中调用看看是否拓展方法成功:

        Student *stu = [[[Student alloc]init]autorelease];  

[stu study];  

        [myclass eat]; 

   打印的结果为:

该学生正在学习,请勿打扰!

这个是拓展学生吃饭的方法!

总结:category这个方式比起继承更好管理代码和维护,随时可以在不改动源码的情况下更改添加业务方法。

0 0
原创粉丝点击