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

释放双眼,带上耳机,听听看~!

一、类别:

类别(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文件中定义类的私有变量和私有方法,一般用于自定义的类,不能像已存在的类添加方法或是变量,这是和类别在使用上的根本差异!

 

人已赞赏
iOS文章

iOS开发 UIView的drawRect调用时机和条件

2020-2-6 19:08:53

iOS文章

iOS开发图片剪切

2020-2-6 23:08:03

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索