美文网首页
block开发中使用场景

block开发中使用场景

作者: 大虾咪 | 来源:发表于2017-03-30 15:40 被阅读12次

    block 开发中使用场景 适合新手理解 熟悉 运用到项目中

    block开发中使用场景

    // 1.把block保存到对象中,恰当时机的时候才去调用
    
    // 2.把block当做方法的参数使用,外界不调用,都是方法内部去调用,Block实现交给外界决定.
    
    // 3.把block当做方法的返回值,目的就是为了代替方法.,block交给内部实现,外界不需要知道Block怎么实现,只管调用
    

    1.把block保存到对象中,恰当时机的时候才去调用

    - (void)block1
    {
        Person *p = [[Person alloc] init];
        void(^block)() = ^() {
            NSLog(@"执行对象中block");
        };
        p.operation = ^(){ 
            NSLog(@"执行对象中block");
        };
        p.operation = block;
        _p = p;
    }
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        _p.operation();
    }
    

    2.把block当做方法的参数使用,外界不调用,都是方法内部去调用,Block实现交给外界决定.

    - (void)block2
    {
        Person *p = [[Person alloc] init];
        void(^block)() = ^{
            NSLog(@"吃东西");
        };
        [p eat:block];
        // 传入block给参数的Block赋值
        [p eat:^{
            NSLog(@"吃东西");
        }];
    }
    
    person:
    - (void)eat:(void (^)())block
    {
        /**
        block = ^{
            NSLog(@"吃东西");
        };
         */
        block();
    }
    

    3.把block当做方法的返回值,目的就是为了代替方法.,block交给内部实现,外界不需要知道Block怎么实现,只管调用

    - (void)block3
    {
        Person *p = [[Person alloc] init];
        
        [p run:2];
    
        p.run(2);
        void(^run)() = p.run;
        run();
    }
    
    Person:
    - (void (^)(int))run
    {
        return ^(int meter){
            NSLog(@"跑了%d米",meter);
        };
    }
    

    相关文章

      网友评论

          本文标题:block开发中使用场景

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