iOS 之 block(2)

在使用block 的过程中,经常会采用为了解决 循环引用,多线程等的问题而烦恼。
在使用block 处理这些问题时,需要注意什么呢?

@interface FirstViewController ()
@property (strong, nonatomic) dispatch_block_t block;
@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    // weak 用来解决循环引用的问题
    __weak typeof(self) weakSelf = self;
    dispatch_block_t block = ^{
        // 采用 strong ,当多线程执行到此处时,保障对象在没有释放的情况下,进行正确的逻辑操作
        // 只有一个线程操作时,不会有问题的,
        // 此处的strong, 在执行block时, 才会生效,如果不执行block 不会生效的
        typeof(self) strongSelf = weakSelf;
        NSLog(@"block");
        if (strongSelf) {
            NSLog(@"%@", weakSelf.description);
        } else {
            // 如果对象释放时,需要做什么?
        }
    };
    self.block = block;
    self.block();
    self.view.backgroundColor = [UIColor whiteColor];
}

- (void)dealloc {
    self.block = nil;
    NSLog(@"%@ dealloc", self.description);
}

@end

总结避免循环引用,考虑多线程的情况,记得 weak-strong dance

你可能感兴趣的:(iOS 之 block(2))