新项目领导要我用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;
}
网友评论