类目和延展扩展系统类

类目就是为已存在的类添加新的方法。但是不能添加实例变量。比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现。

以下是通过给UIButton添加方法实现对UIButton添加方法实现对UIButton扩展:

@interface UIButton (CategoryButton)
+(id)initWithFrame:(CGRect)frame title:(NSString*)title state:(UIControlState)state titleColor:(UIColor*)titleColor target:(id)target action:(SEL)action event:(UIControlEvents)event type:(UIButtonType)type;
//+(id)
@end

以上声明一个简单的初始化方法,以下是实现方法:

#import "UIButton+CategoryButton.h"

@implementation UIButton (CategoryButton)
+(id)initWithFrame:(CGRect)frame title:(NSString *)title state:(UIControlState)state titleColor:(UIColor *)titleColor  target:(id)target action:(SEL)action event:(UIControlEvents)event type:(UIButtonType)type{
    UIButton* button = [UIButton buttonWithType:type];
    button.frame = frame;
    [button setTitle:title forState:state];
    [button setTitleColor:titleColor forState:state];
    [button addTarget:target action:action forControlEvents:event];
    return button;
}
@end

Category的使用场景有那些呢:
1、类包含了很多个方法实现,而这些方法需要不同团队的成员来实现
2、当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法时。
 
Category能实现上面的需求,当然也有使用Category是需要注意的问题:
1、Category可以访问原始类的实例变量,但不能添加实例变量,如果想添加变量,那就通过继承创建子类来实现。
2、Category可以重载原始类的方法,不大不推荐这么做,这样会覆盖掉原始类的方法。如果确实要重载,那就通过继承创建子类来实现。
3、和普通接口有所区别的是,在Category的实现文件中的实例方法只要你不去调用它你可以不用实现所有声明的所有方法。

延展:

延展的作用就是定义自己的私有方法。

形式和类目相同,不用新创建文件,只是把类目的interface地方的文件放在了你需要扩展的类的.m文件里边。



#import "Student.h"
@interface Student (extension)//为Student类创建一个私有的方法text
-(void)text;
@end

@implementation Student
-(void)hello;
{
    [self  text];
}

-(void)text
{
    NSLog(@"你好");
}
@end
好了,延展和类目基本就这些内容。下节讲,继承,延展和类目 一起使用做一个界面
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值