Object-C中的动态特性Category

刚接触Object-C哪会儿,因为名字里带着个“C”以及类名中的“*.h”、“.m”习惯,老觉得Object-C就是一个很古老的东西,不会支持接口,多态之类的特性。其实别人早就提供了,名字不一样而已。不要带着偏见去看待事物,恩恩!

在Object-C中,提供了一种动态扩展类的方式——Category,它可以动态的为已存在的类添加新的方法,有点类似于Ruby的打开类技术,不同的是Category必须为扩展创建一个新类,新类的名称一般约定为“原类名称+扩展名”。有了这个技术之后,开发者在写代码时就可以从把原始的类设计得非常小,然后在功能增加时再逐步扩展,另外,可以很容易的把新添加的行为模块化。

Category的实现和使用方式非常简单,比方说,在写UI的时候,想使用自己的字体类型和字体大小,这个时候就可以尝试使用Category扩展UIFont支持自己想用的字体和字体大小。首先创建一个Category新类,(UIFont+SnapAdditions.h)

#import <UIKit/UIKit.h>
@interface UIFont (SnapAdditions)

+(id)xnl_snapFontWithSize:(CGFloat)size;

@end


#import "UIFont+SnapAdditions.h"

@implementation UIFont (SnapAdditions)

+(id)xnl_snapFontWithSize:(CGFloat)size
{
return [UIFont fontWithName:@"Action Man" size:size];
}
@end

创建好之后,在想使用该方法的类中引入Category类,然后像使用UIFont自身的方法一样使用新的方法就行了。

#import "UIFont+SnapAdditions.h"

self.statusLabel.font = [UIFont xnl_snapFontWithSize:16.0f];
...

应用场景:
[list]
[*]想为已有类(自己创建的或者SDK类库)扩展新的方法。
[*]多个团队协作时,需要对同一个类进行修改,可以有效隔离相互影响。
[/list]
注意事项:
[list]
[*]新创建的Category类不能拥有自己的变量,需要自己的变量可通过继承实现。
[*]新创建的Category类会覆盖同名的原类的方法,因此给新方法命名的时候最后特殊一点,避免覆盖原类方法,导致不可预知的错误。
[*]新创建的Category类虽然也有“.h”和“.m”文件,但是实现类并不需要实现所有的接口方法,只要不去调用方法就不会有问题。
[/list]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值