A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© luronghua 中级黑马   /  2016-7-14 23:49  /  1214 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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是不具有的。通过类别所添加的新方法可以向这个类的其他方法一样完成任何操作。在运行时,新添加的方法和已经存在的方法在使用上没有任何区别。通过类别添加的方法和别的方法一样会被他的子类所继承。


2 个回复

倒序浏览
666666666666666
回复 使用道具 举报
大神啊,你都能写这么多了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马