如果你的问题在网上找不到,那一定是你犯了一个低级错误。

结论

Edit Scheme中勾选Malloc Stack会导致每次Xcode覆盖安装App都预先占用一定量的数据存储空间,且由于某种原因,本来每次存储几十KB的数据结果占用了几十MB;同时,这个勾选项还会导致Instrument - Leak界面出现名为<Allocated Prior To Attach>的Leak。

Edit SchemeZombie Object调试结束要记得关掉,否则会在Instrument - Leak界面产生大量的名为Zombie Object的Leak。

过程

有天突然发现iPhone储存空间管理界面,显示我的App占用了3.7GB的文稿数据空间。震惊之余,立马用模拟器和真机重新安装,边跑边记录文稿数据变化情况。经过整理如下有2个问题表现:

  1. 真机每次跑完一次步,会增加10几MB的文稿数据存储空间。
  2. 真机每次Xcode覆盖安装都会额外增加8MB的文稿数据存储空间。
  3. Instruments - Leak中有数不尽的Leaks,其中占比最大的是叫做<Allocated Prior To Attach>的Leak。

一通搜索,尝试了以下几个方案:

  1. 将工程代码中闭包里的被强引用的self全部改为弱引用。虽然这点学了点东西,不过对于当前的问题,没有实际效果。
  2. Leak界面看到了Zombie Object,想到之前修改过Scheme,于是前往将Zombie Object反选。之后Leak界面一下子少了很多所谓的Leak
  3. 数据量大的问题,一筹莫展之际,去看了Xcode运行状态中的Disk,发现确实每次都有7MB新增的空间,于是拿这个界面的关键词进行搜索,结果还是Scheme的锅。在Edit Scheme中反选Malloc Stack,问题立马解决了。
  4. 步骤三做了以后,Leak界面就没有<Allocated Prior To Attach>的Leak名称了。

收获

整个过程,前后搜索、尝试、验证,花了我大约5个小时。就是这样的时刻,让我觉得新手自学有太多的艰难。有些东西,对于别人几乎像是常识般;而对于新手,就是一个有待解决的问题,而正因为在别人眼里是常识,导致新手很难在网络上找到现成的答案。

如果你的问题在网上找不到答案,那一定是你犯了一个低级错误。

我之前就有这样的意识了,也许以后可以考虑先把问题搁置起来,而不必第一时间就要找到解决方案,尤其是网上搜不到同类问题的时候。

不过,今天这番至少知道了:要在闭包里用弱引用,怎样使用Instrument - Leak,以及查看Xcode的运行状态。