记一次ReactiveObjC的神奇bug

2021-07-15  本文已影响0人  携一两本单色书来

接手的项目线上突然出现了一个bug~


bug

很明显的数组越界,定位到指定控制器。emmm~ 这么多数组,也没法定位到那个数组越界了。

不要急,分析后发现,[0~9]取第59个。这个数组,很分页啊! 十有八九出在这里了~

先看看代码~

controller:

[[RACObserve(self.viewModel, loadState) deliverOn:RACScheduler.mainThreadScheduler]
     subscribeNext:^(NSNumber *loadStateNumber) {
...
[self.tableView reloadData];
}];

viewModel:

    [request SuccessBlock:^( NSDictionary *data) {
        @strongify(self)
     
        self.loadState =Success;
       
       ...数据赋值
        
    } failureBlock:^( NSString *errMsg, NSInteger errCode) {
       
    }];

很明显写的有问题,应该是先数据赋值,然后再刷新UI。问题应该就是这里了!

但是,按理说应该是必奔溃的问题,为什么一直没有发现呢?

试验了一下,神奇的事情发生了,这么写居然是没有问题的!
viewModel数据赋值完成后,controller才会刷新。。。奇怪,哪里怪怪的。

去掉控制器的mainThreadScheduler又试了一下,果然,必现。奇怪了,赋值,状态改变,UI刷新都是在main线程的,我以为mainThreadScheduler这句代码没什么用,ReactiveObjC内部不知道干了些什么。。。

记得18年时候试过一次ReactiveObjC,结果通知一直释放不了,之后就一直比较抵触这个东西。后来直接上手了RxSwift,没想到又栽在这里。。

上一篇 下一篇

猜你喜欢

热点阅读