block回调-传值
其实就是block作为参数
传值方:类的.h有block属性,类的.m有block调用(传值,其实就是给block属性传递参数),相当于调用代理方法,
捕获方(回调):调用该类的block属性,写自己的代码,就和代理在此时重写方法一样
保存代码,需要时直接调用
void(^block)() = ^{
NSLog(@"调用block");
};
block();
书写方式
//属性方式
@property (strong,nonatomic) modalBlock modalB;
//替换方式
typedef void(^haveNet) (BOOL isNet);
typedef void(^block 名) (参数类型 参数名);
+(instancetype)initWithBlock:(modalBlock)block;
//传值方式
if (self.modalB) {
self.modalB(@"666");
}
//方法调用
+(instancetype)initWithBlock:(modalBlock)block{
ModalViewController *modalVC= [[ModalViewController alloc]init];
modalVC.modalPresentationStyle = UIModalPresentationOverFullScreen;
if (modalVC) {
** modalVC.modalB = block;**
}
return modalVC;
}
//调用方式,给block赋值(就是给回调返回值)
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
NSLog(@"333");
if (self.modalB) {
self.modalB(@"666");
}
if (self.textB) {
self.textB(@"777");
}
[self dismissViewControllerAnimated:YES completion:nil];
}
//回调
VC.textB = ^(NSString *text) {
NSLog(@"%@",text);
};
内存管理
MRC:属性使用copy
ARC:属性使用strong
block作为函数参数
// 怎么区分参数是block,就看有没有^,只要有^.把block当做参数
// 把block当做参数,并不是马上就调用Block,什么时候调用,由方法内部决定
// 什么时候需要把block当做参数去使用:做的事情由外界决定,但是什么时候做由内部决定.
//就像是代理
block作为函数返回值
函数式响应式编程思想
网友评论