标签:
首先我们来谈谈Category。
Objective-C提供了一种与众不同的方式——Catagory,可以动态的为已经存在的类添加新的行为。这样可以保证类的原始设计规模较小,功能增加时再逐步扩展。使用Category对类进行扩展时,不需要访问其源代码,也不需要创建子类。Category使用简单的方式,实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中。
实现起来很简单,我们举例说明。
SomeClass.h @interface SomeClass : NSObject{ } -(void) print; @end
这是类SomeClass的声明文件,其中包含一个实例方法print。如果我们想在不修改原始类、不增加子类的情况下,为该类增加一个hello的方法,只需要简单的定义两个文件SomeClass+Hello.h和SomeClass+Hello.m,在声明文件和实现文件中用“()”把Category的名称括起来即可。声明文件代码如下:
#import "SomeClass.h" @interface SomeClass (Hello) -(void)hello; @end
实现文件代码如下
#import "SomeClass+Hello.h" @implementationSomeClass (Hello) -(void)hello{ NSLog (@"name:%@ ", @"Jacky"); } @end
其中Hello是Category的名称,如果你用XCode创建Category,那么需要填写的内容包括名称和要扩展的类的名称。这里还有一个约定成俗的习惯,将声明文件和实现文件名称统一采用“原类名+Category”的方式命名。
调用也非常简单,毫无压力,如下: 首先引入Category的声明文件,然后正常调用即可。
#import "SomeClass+Hello.h" SomeClass * sc =[[SomeClass alloc] init]; [sc hello]
执行结果是:
name:Jacky
Category的使用场景:
遇到以上这些需求,Category可以帮助你解决问题。当然,使用Category也有些问题需要注意,
用好Category可以充分利用Objective-C的动态特性,编写出灵活简洁的代码。
标签:
原文地址:http://www.cnblogs.com/killiancheung/p/4635136.html