自学路上的坑01 - Scheme勾选项带来的一些列问题
如果你的问题在网上找不到,那一定是你犯了一个低级错误。
结论
Edit Scheme
中勾选Malloc Stack
会导致每次Xcode覆盖安装App都预先占用一定量的数据存储空间,且由于某种原因,本来每次存储几十KB的数据结果占用了几十MB;同时,这个勾选项还会导致Instrument - Leak
界面出现名为<Allocated Prior To Attach>
的Leak。
Edit Scheme
中Zombie Object
调试结束要记得关掉,否则会在Instrument - Leak
界面产生大量的名为Zombie Object
的Leak。
过程
有天突然发现iPhone储存空间管理界面,显示我的App占用了3.7GB的文稿数据空间。震惊之余,立马用模拟器和真机重新安装,边跑边记录文稿数据变化情况。经过整理如下有2个问题表现:
- 真机每次跑完一次步,会增加10几MB的文稿数据存储空间。
- 真机每次Xcode覆盖安装都会额外增加8MB的文稿数据存储空间。
- 在
Instruments - Leak
中有数不尽的Leaks,其中占比最大的是叫做<Allocated Prior To Attach>
的Leak。
一通搜索,尝试了以下几个方案:
- 将工程代码中闭包里的被强引用的
self
全部改为弱引用。虽然这点学了点东西,不过对于当前的问题,没有实际效果。 - 在
Leak
界面看到了Zombie Object
,想到之前修改过Scheme
,于是前往将Zombie Object
反选。之后Leak界面一下子少了很多所谓的Leak
。 - 数据量大的问题,一筹莫展之际,去看了
Xcode
运行状态中的Disk
,发现确实每次都有7MB新增的空间,于是拿这个界面的关键词进行搜索,结果还是Scheme
的锅。在Edit Scheme
中反选Malloc Stack
,问题立马解决了。 - 步骤三做了以后,
Leak
界面就没有<Allocated Prior To Attach>
的Leak名称了。
收获
整个过程,前后搜索、尝试、验证,花了我大约5个小时。就是这样的时刻,让我觉得新手自学有太多的艰难。有些东西,对于别人几乎像是常识般;而对于新手,就是一个有待解决的问题,而正因为在别人眼里是常识,导致新手很难在网络上找到现成的答案。
如果你的问题在网上找不到答案,那一定是你犯了一个低级错误。
我之前就有这样的意识了,也许以后可以考虑先把问题搁置起来,而不必第一时间就要找到解决方案,尤其是网上搜不到同类问题的时候。
不过,今天这番至少知道了:要在闭包里用弱引用,怎样使用Instrument - Leak,以及查看Xcode的运行状态。