内存处理:
- 使用分析器,修改泄露的问题
- 避免循坏引用,dealloc、rootviewcontroller、block 的self 等参数
- 确定dealloc 方法按照预期调用了
- 基本上没什么好说了,你已经做了你该做的
——显然UIKit本身还做了一些其它的你不需要知道的事情,也许是为了优化整个流程,也许是对特定的控件做了缓存,等等
细节:
去除循环引用
如 new.delegate = self (weak)
.rootViewController = self;
block 相关
- 不要在 block 中引用self,而是使用
__block id copy_self = self;
- block 只会对栈进行只读拷贝
只能使用,不能写,如
int x = 1
^{
x=3 //将报错
}
而使用
__block int x = 1;
^{
x=3 //可以的
}
The last:
无论APP怎么表现,都需要保证更好地质量。在此基础上,多花时间在一些feature上。同时可以使用一些自带工具监测内存如 Allocation 、Leaks 和zoombies。
引用neogui的一段话:你的代码基本没什么问题, 所以不要为了64 Bytes纠结,你push、pop一次才leak这么点内存,用户点按钮再回来1000次也才64K而已。找回这64 Bytes不会给你的用户带来任何惊喜,但是如果你多花时间在一些feature上,你的用户会很感激你,也会很愿意掏皮夹