新建一个任意类,例如 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代替
};
网友评论