Block的使用

2021-03-27  本文已影响0人  落魄的iOS程序员

1、block的定义有三种,无返回值无参数:typedef void(^block) (void);

有返回值无参数:typedef int(^block) (void);

有返回值有参数:typedef int(^block)(int a);

2、在使用block的过程中,__weak typeof(self) weakSelf = self;并不是什么时候都是用,但是使用时没问题的;

3、如果block调用外部变量为局部变量,那么仅仅是值的传递,外部变量的改变不会影响内部,如果过是全局变量或者变量由__blcok修饰,那么内外是一个同一个变量;

4、在UIView的block动画中一般不会造成循环应用,而在GCD的block函数中调用self我们则要考虑循环引用;

5、block的循环引用:如在类A中定义了属性block属性block和string属性name,那么在使用block的时候

 __weak typeof(self) weakSelf = self;这里使用__weak即可解决循环引用问题

    self.block=^{

        NSLog(@"testBlock=%@",weakSelf.name);

    };

 self.block = ^{

        __strong typeof(weakSelf) strongSelf = weakSelf;

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

            NSLog(@"dispatch_after=%@",strongSelf.name);

        });

    };

上一篇 下一篇

猜你喜欢

热点阅读