ios的类别(category)和扩展(Extension)

本文介绍了Objective-C中的类别和扩展的概念及用法。类别可以在不继承的情况下为现有类添加新方法;扩展则用于定义类的私有变量和方法,适用于自定义类。文章对比了二者之间的区别,并给出了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、类别:

类别(category)在使用中还是用的比较多的,用起来也很方便,特别是在为框架类进行拓展的时候,在不继承类的条件下给类添加方法!

实现格式(以为NSSing类添加一个方法为例):

@interface NSString(CNSString) //CNSString可以随便取,只要不和其他的类重名
-(BOOL)isURL;
@end

可能你会这样想,我通过继承也能做到啊,说得也有道理。但是如果仅仅是为了添加一个方法而继承一个类,这个开销是不划算的:比如说我想为NSString 类添加一个方法,用于判断字符串是不是一个url链接:

@implementation NSString(CSString)

-(BOOL)isURL{

  return [self hasPrefix@"http://"];

}

@end

就成功的网类NSString里添加了isURL这个方法,使用的时候就:

NSString *str = @"http://www.baidu.com";

BOOL bRet = [str isURL];

非常的方便,但使用的时候也要注意它的缺点:

1. 不能往类中添加实例变量。

2. 新拓展的方法不要和已经存在的方法同名,否则已存在的方法会被扩展的方法覆盖(除非你故意为之)。


二、扩展

扩展(Extension):很多人说扩展是匿名的类别,我觉得这么说有点不妥,先看一下扩展的使用,

@interface NSString()
-(BOOL)isURL;
@end

乍看之下确实挺像,但在往下看,扩展也可以这么用
@interface NSString()
@property(strong, nonatomic) NSArry;
@end
像类中添加了实例变量,这是违背类别的使用原则的!
扩展在实际中一般用于在.m文件中定义类的私有变量和私有方法,一般用于自定义的类,不能像已存在的类添加方法或是变量,这是和类别在使用上的根本差异!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值