美文网首页
Block的简单使用(可代替代理)

Block的简单使用(可代替代理)

作者: 给你快乐 | 来源:发表于2016-03-10 11:44 被阅读164次

    新建一个任意类,例如 BlockView.h继承于UIView

    1.在BlockView.h中定义属性@property(nonatomic,copy) void(^newBlock)();  这里的属性相当于id <协议> delegate

    2. 在需要用到BlockView对象初始化完成的时候,定义block中要执行的操作

    BlockView * view=[[BlockView  alloc]init];

    view.newBlock=^( ){

    NSLog(@"这里写要执行的操作,相当于代理方法的实现");

    };

    [self.view addSubview: view];

    3.在需要代理执行代理方法的时候原来要让代理去执行代理方法,如:[view.delegate log];现在只需要写: view.newBlock( );

    4. 这样做不需要设置代理,写起来更快,但是代码执行顺序不易看明白

    5.block的内部实现不能直接写self,例如:

    view.newBlock=^( ){

    self.view.backgroundColor=[Uicolor  redColor];//这样会警告,但可以运行

    };

    解决办法是在这个block之前加上: 

     __weak typeof  (self)  weakSelf = self;

    view.newBlock=^( ){

    weakSelf.view.backgroundColor=[Uicolor  redColor];//所有的self都用weakSelf代替

    };

    相关文章

      网友评论

          本文标题:Block的简单使用(可代替代理)

          本文链接:https://www.haomeiwen.com/subject/rdstlttx.html