美文网首页
项目中的RAC中的内存问题

项目中的RAC中的内存问题

作者: xiaoliang1 | 来源:发表于2019-04-19 13:04 被阅读0次

    新项目领导要我用RAC,说实话,我是不会的。但是为了做了,我还是学了。看了两天代码直接进入新项目了。我是很烦看代码。沉不下去。新项目也是一边百度RAC一边写。
    由于不熟悉百度上展示的啥,我就搞成啥样的。

    - (void)bindSignal {
        
        @weakify(self);
        [[self.nextStepBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id  _Nullable x) {
      
         @strongify(self);
            AddBoxGuideGetWifiInfoVC *vc = [AddBoxGuideGetWifiInfoVC new];
            [self.navigationController pushViewController:vc animated:YES];
            BBLog(@"--%@",x);
        }];
    }
    

    每个都是在viewdidload 里面调用。
    我也是照顾画瓢。新东西,我还是不敢去改来改去的。
    最近领导和测试告诉我app用着用着,用久的话会闪退。
    我很是纳闷,心想一定哪内存泄漏,难道是心跳那里。这事一直没放心上。
    最近突然想起来有这个问题。看了看。
    之前我还是纳闷里面要不要用@strongify(self);因为之前一直没用,了解到如果要保持多线程改一个对象的话尽量要strong一下。
    但是百度好多都是这样写的,而且领导给我的项目也是这样写的。
    记得之前群里有人吐槽RAC内存泄漏很严重。我心里只是注意了一下。

    今天我以以前的老方法来测试这个控制器是否有内存泄漏


    WX20190419-115526.png

    发现只要去掉bindSignal 方法,对象一般就很快的就能释放掉。
    不去掉的要么很慢。要么就不会释放掉。会有内存泄漏。
    我确定一定是bindSignal 里的RAC导致的内存泄漏。
    于是我用老方法,敢改的心态去改了:

    @weakify(self);
        [[self.nextStepBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id  _Nullable x) {
            AddBoxGuideGetWifiInfoVC *vc = [AddBoxGuideGetWifiInfoVC new];
            [self_weak_.navigationController pushViewController:vc animated:YES];
            BBLog(@"--%@",x);
        }];
    

    改成这样之后,我再去测试。居然发现pop到上一个页面VC控制器很快就释放了。
    happy.全改了。
    ========================================================
    题外话:
    NSMutableAttributedString也是很消耗性能的。释放也没那么及时。可以这么做,很快就能释放掉:

    @autoreleasepool {
            
            NSMutableParagraphStyle *paragraphStyleM = [NSMutableParagraphStyle new];
            paragraphStyleM.lineSpacing = 3.0;
            NSDictionary *dict = @{NSFontAttributeName:Font(10),NSForegroundColorAttributeName:Color333333,NSParagraphStyleAttributeName:paragraphStyleM};
            NSMutableAttributedString *attribuStr = [[NSMutableAttributedString alloc] initWithString:str attributes:dict];
            cell.bottomLable.attributedText = attribuStr;
        }
    

    相关文章

      网友评论

          本文标题:项目中的RAC中的内存问题

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