诡异的内存泄露

我厂的App长时间使用后,有闪退的情况发生,估计是有内存泄露导致App被系统杀死。用Instruments查看后发现的确有内存泄露发生。

第一处如下图:

诡异的内存泄露_第1张图片
WechatIMG3.jpeg

这是因为使用了第三方视频播放SDK造成的,原因不明。暂时搁置

更新:这个是因为播放的视频文件格式为.mp4,AVPlayer播放的时候就内存泄露,怀疑是视频文件本身有问题,尝试使用Quicktime转换为.mov时,发生错误,不能转换成功。后面将.mp4改为.mov格式,内存泄露消失。

真正诡异的内存泄露如下图:

诡异的内存泄露_第2张图片
WechatIMG4.jpeg

所有泄露都是发生在系统框架。我直接就懵逼了,google了一圈,发现很早之前Apple系统框架的确有内存泄露,但都好多年了,早应该修复了啊。

回到我们的App,排查到内存泄露的地方,发现代码没有问题。就是很多个UILabel显示而已,再仔细看内存泄露的截图,发现很多泄露都和attributedstring有关系,但代码里面根本就没有使用这个。最后在xib里面发现有部分UILabel设置了attribute属性,如下图:

诡异的内存泄露_第3张图片
WechatIMG2.jpeg

而在实际代码里面,根本没有使用UILabel的attributedText属性,都是直接赋值给text属性。将xib里面的UILabel的Attributed全部改为Plain后, 内存泄露修改。

我猜测:如果xib里面设置有attributeText,而在代码里面有没有使用这个属性,那么就会造成内存泄露。稍后我会测试一下。

更新:又花了些时间来测试这个内存泄露,发现其实不完全是attributeText的问题,xib里面大概有10多个UILabel,有10个UILabel使用了attributeText,其中只有一个attributeText有问题,

诡异的内存泄露_第4张图片
WechatIMG5.jpeg

如上图所示,我删除标为 1 的代码后,内存泄露消失。但我发现 标1 和 标2 的代码完全一样,为什么不是 标2 的代码导致内存泄露呢?而且类似 标1 的代码还存在好几处。为什么不是其他类似代码的问题呢?

我已经完全遭逼了!

你可能感兴趣的:(诡异的内存泄露)