iOS-block总结

2018-07-24  本文已影响15人  CDLOG

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作为函数返回值

函数式响应式编程思想

上一篇下一篇

猜你喜欢

热点阅读