category 是Objective-C 里面最常用到的功能之一。category可以为已经存在的类增加方法,而不需要增加一个子类。而且,我们可以在不知道某个类内部实现的情况下,为该类增加方法。如果我们想增加某个框架(framework)中的类的方法,category 就非常有效。比如,如果想在NSString 上增加一个方法来判断它是否是有效的 URL,那么就可以这样做:
[java] view plaincopy @interface NSString (extension) - (BOOL) isURL; @end 是不是觉得与类的定义非常像,确实,就是category 没有父类,而且后面要跟括号里面写category 的名字,名字可以随便取。下面是刚刚 isURL 的实现: [java] view plaincopy @implementation NSString(extension) - (BOOL) isURL{ if( [self hasPrefix:@"http://"] ) return YES; else return NO; } @end 现在就可以在任何NSString类对象上调用这个方法了。下面是一个调用的例子: [java] view plaincopy NSString* str1 =@"http://www.blog.csdn.net/iukey"; NSString* str2 = @"刘伟Lewis"; if([str1 isURL]) NSLog(@"str1 is a URL"); if([str2 isURL]) NSLog(@"str2 is a URL"); 通过上面的例子可以看出,通过类别所添加的新方法就成为类的一部分。我们通过为类别所添加的方法也存在于他的方法列表中,而为NSstring 子类添加的新方法,NSString是不具有的。通过类别所添加的新方法可以向这个类的其他方法一样完成任何操作。在运行时,新添加的方法和已经存在的方法在使用上没有任何区别。通过类别添加的方法和别的方法一样会被他的子类所继承。
|