美文网首页
iOS 之 block(2)

iOS 之 block(2)

作者: 老猫_2017 | 来源:发表于2020-01-13 13:21 被阅读0次

    在使用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)

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