objective-c类别(Category)详细解说

objective-c类别(Category):为一个已经存在的类增加方法,而不是增加一个子类。

先上代码:

NSStringUtilities.h

//#import <Cocoa/Cocoa.h> #import <Foundation/Foundation.h> @interface NSString (Utilities) -(BOOL)isURL; @end


NSStringUtilities.m

#import "NSStringUtilities.h" @implementation NSString (Utilities) -(BOOL)isURL{ if ([self hasPrefix:@"http://"]) { return YES; }else { return NO; } } @end
UseCategories.m

#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSString *string1 = @"http://www.xinlaoshi.com/"; NSString *string2 = @"Pixar"; if ([string1 isURL]) { NSLog(@"string1 is a URL"); }else { NSLog(@"string1 is not a URL"); } if ([string2 isURL]) { NSLog(@"string2 is a URL"); } else { NSLog(@"string2 is not a URL"); } [pool drain]; return 0; }

这个例子是给NSString这个类添加一个判断一个字符串是否是一个链接的方法。

以上例子可以总结出其格式是:

#import "类名.h"

@interface 类名(类别名)

//新方法的声明

@end


#import "类名类别名.h"

@implementation 类别(类别名)

//新方法的实现

@end


下面是我从别的地方看的,链接是:http://www.cocoachina.com/bbs/read.php?tid=83441&page=1

这篇博文太长了,下面是我认为比较重要的几点:

类别的局限性
有两方面局限性:
(1)无法向类中添加新的实例变量,类别没有位置容纳实例变量。
(2)名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级。类别方法将完全取代初始方法从而无法再使用初始方法。
无法添加实例变量的局限可以使用字典对象解决

4、类别的作用
类别主要有3个作用:
(1)将类的实现分散到多个不同文件或多个不同框架中。
(2)创建对私有方法的前向引用。
(3)向对象添加非正式协议。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值