category和protocol 第五天稍晚了一些。

项目 A OC提供了一种与众不同的方式-category,可以动态的为已经存在    的类添加新的行为(方法)

 

项目 A 这样可以保证类的原始设计规模较小,功能增加时,再逐一扩展

项目 A category使用简单的方式,实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中。

 

新建一个文件,选择category,然后category on 你要扩展的类:文件生成后,会这样


 

 

 

注意:分类只能增加类的方法,不能增加成员变量。

 

 

 

Category使用场景:

1.在定义类时的某些情况下,(例如需求变更),你可能想要为其中的某个或几个类中添加新的方法:

2.一个类中包含了许多不同种类的方法需要实现,而这些方法需要不同团队的成员实现

3.在使用基础类库中的类时,有可能希望这些类实现一些自己需要的方法,比如写个NSString +JSON.hNSString这个类扩展一些解析,JSON的方法。

 

 

 

Protocol:(协议)

  

<>:表示实现某个协议。

 

协议的实现步骤:

1.制定一个协议,

@protocol ButtonDelegate <NSObject>

-(void)Onclick:(Button*)btn;

@end

 

 

2.设置监听器:delegate :监听器:

@interface Button : NSObject
@property (nonatomic,retain) id <ButtonDelegate> delegate;

-(void)click;
@end


模拟按钮被点击,如果点击了,就通知监听器。


 

-(void)click{
    
    //respondsToSelector这个方法可以判断一个代理有没有实现协议中的方法。
    //该函数返回类型类型是一个bool类型的。
    if([_delegate respondsToSelector:@selector(Onclick:)]){
        //如果按钮被点击了就通知监听器;
        [_delegate Onclick:self];
    }else{
        NSLog(@"监听器没有实心Onclick 方法 :");
    }
}

Delegate实现了ButtonDelegate这个协议,然后协议里面有一个onClick方法:

 

 @autoreleasepool {
        Button  *button = [[[Button alloc]init]autorelease];
        ButtonListener *listener = [[[ButtonListener alloc]init]autorelease];
        MyListener *listener2 = [[[MyListener alloc]init]autorelease];
        button.delegate=listener2;
        [button click];
        
        button.delegate=listener;
        
        [button click];
        
        
    }


 

如果button被点击了,就会通知监听器,按钮被点击了。这时候listener充当button的监听器。

 

因为协议里面有一个方法,只要你满足这个协议,就要实现它的方法,然后再实现了协议的文件里面要实现在协议里面定义的那个方法。

 

//协议的声明,和@class一致。这也是为了系统的
@protocol ButtonDelegate;


然后在.m文件里面包含协议所在的那个头文件

 

 

注意:一般情况下,如果你要实现一个协议的话,你就要把点击了按钮的那个对象给打印出来,然后也要判断监听器是否有协议所规定的方法:

 

抛出一个对象

-(void)Onclick:(Button*)btn;

 

 

判断是否有回应函数。

 //respondsToSelector这个方法可以判断一个代理有没有实现协议中的方法。
    //该函数返回类型类型是一个bool类型的。
    if([_delegate respondsToSelector:@selector(Onclick:)]){
        //如果按钮被点击了就通知监听器;
        [_delegate Onclick:self];
    }else{
        NSLog(@"监听器没有实心Onclick 方法 :");
    }


 

 

 

 

 

NSObject :基类:成员方法:

1.iskindOfClass isMemberOfClass 的区别。

 


 

 

 

 

反射:

根据一个字符串,实例化一个对象。

1.类的反射:


 


 

 

 

 

2.方法的反射:

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值