我对内存管理代码还不熟悉,但基本原理我已经了解了。
在使用XCode的泄漏检测工具时,我发现我只需要清理我的自定义对象,而无需处理动态创建的数组等数据类型,因此我认为这些数据类型是自动释放的——这很有道理,因为我只需要释放那些具有(retain)属性的数组,作为属性使用的数组都需要这样做。
然后我注意到一件奇怪的事情:我正在用下面这种方式初始化一个数组,但却出现了泄漏:
NSMutableArray *removals = [NSMutableArray new];
但不是类似的一个
NSMutableArray *removals = [NSMutableArray arrayWithCapacity:9];
现在,使用"new"设置第一个数组的原因是它可能有0-99个项目,而我知道另一个数组永远只会有9个项目。由于两个数组后来都会基于用户交互传递给同一个方法,如果我不在方法末尾释放第一个数组,就会发生泄漏,否则就会抛出异常!
我将第一个数组更改为
NSMutableArray *removals = [NSMutableArray arrayWithCapacity:99];
我没有泄漏并且不需要释放任何东西。有人能解释一下吗?