IOS Objective-c:派生类NSObject派生但内存开始增加

时间:2013-11-08 10:12:19

标签: ios objective-c memory-management memory-leaks nsobject

我注意到我的代码中有一个非常糟糕的行为,我不知道如何解决这个问题。我在Xcode中使用了乐器工具,但我仍然无法理解为什么每次循环时内存会不断增加。

用几句话说:

  1. 我创建了一个派生自nsobject的类;
  2. 我运行一个循环,在其中我从这个类创建对象并序列化它们并使用序列化对象保存url;
  3. 在每个循环中释放临时对象(我在dealloc func中检查)但内存占用仍然增加。
  4. 我在iPad上进行了测试,如果循环次数非常高,则内存会越来越低,直到App崩溃为止。

    我在每个对象分配周围使用了@autoreleasepool,但仍然没有变化。

    谢谢!

1 个答案:

答案 0 :(得分:3)

这里没有提供代码是最好的行动方案

  1. 使用ARC
  2. 修复所有编译器警告
  3. 在Xcode中运行Analyzer并修复任何警告。
  4. 在仪器中使用生成分析(快照)
  5. 使用仪器检查由于保留但未泄漏的内存导致的泄漏和内存丢失。后者是未使用的内存,仍然指向。在仪器上的分配工具中使用快照。

    如何使用“快照”查找内存褶皱,请参阅:bbum blog

    基本上有一种方法是运行仪器分配工具,获取快照,运行代码直观和另一个快照重复3或4次。这将指示在迭代期间分配但未释放的内存。

    要弄清楚披露的结果,以查看个别分配。

    如果您需要查看对象使用仪器的保留,释放和自动释放的位置:

    在仪器中运行,在分配中设置“记录参考计数”(您必须停止记录以设置选项)。导致选择器运行,停止记录,搜索那里的ivar(datePickerView),向下钻取,你将能够看到所有保留,释放和自动释放发生的位置。