9.在项目中利用block替换代理方法,实现通知

 利用代理方法的缺点:     

        通常我们在自定义工具类或视图类中进行一些操作之后需要通知视图控制器,我们都会通过代理来实现。一般实现方法是先定义协议,然后声明代理属性,然后在对应方法中调用代理对象的该方法。然后到视图控制器中,声明遵守协议 ,设置该类对应的对象的代理为视图控制器,然后实现对应协议中代理方法。这样就能完成通知视图控制器。但是这样做步骤太多,比较麻烦。接下来介绍一个利用block来完成通知的方法。

使用block:

        首先在自定义类中声明一个block类型的属性,然后将需要传出的参数设为block的参数,下面通过具体实例来进行说明:

@interface CYLView : UIView


@property (nonatomic, copy) void (^CYLViewBlock)(UIButton *btn);



@end
首先自定义一个视图类,该类拥有一个block属性。该类用xib描述view,上面有一个按钮,要实现点击按钮时通知视图控制器打印出点击的按钮。

        该类的实现文件如下图所示:

@implementation CYLView


- (IBAction)btnClick:(UIButton *)sender
{
    if (self.CYLViewBlock) self.CYLViewBlock(sender);
}

@end
            在点击按钮时,判断block属性是否有值,有的话就执行该段block


视图控制器中的代码如下:

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    CYLView *view = [[[NSBundle mainBundle]loadNibNamed:@"CYLView" owner:nil options:nil]lastObject];
    view.frame = CGRectMake(0, 100, 300, 300);
    view.CYLViewBlock = ^(UIButton *btn){
        NSLog(@"%@",btn);        
    };
    [self.view addSubview:view];
    
}


@end

           将按钮点击后要传入的代码放入block即可。注意这段block中使用self时要声明为弱引用,否则会造成循环引用。具体请参照第8篇日志。

这样即可实现通知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值