美文网首页
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