2010-04-22 48 views
0

我试图按照Apple的建议来处理低内存警告(在WWDC 2009视频的会话416中找到),释放释放我的dataController对象所使用的资源(在我的应用程序委托引用),其中包含了大量的字符串从一个plist中写着:发布不释放低内存条件下的内存

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { 
    [_dataController release]; 
    _dataController = nil; 
    NSLog([NSString stringWithFormat:@"applicationDidReceiveMemoryWarning bottom...  retain count:%i", [_dataController retainCount]]); 
}  

但是当我内仪器运行和ObjectAlloc中模拟低内存情况,我没有看到在下降我的应用程序使用的内存,即使我看到写出的NSLog语句和对象的保留计数为零。我确实将应用程序委托的引用传递给某些视图控制器。但是上面的代码释放了对_dataController对象的引用(包含plist数据),所以我期望内存被释放。

任何帮助,将不胜感激。

回答

1

您确定应用程序代表是_dataController的唯一所有者吗? -release只会减少引用计数,除非引用计数下降到零,否则不会释放该对象。

如果_dataController也被其他对象所有,请发送消息给他们释放它。

0

我仔细检查了一下。感谢您的输入!我确实从Apple重读了内存管理文档,并且在DataController的dealloc方法中放了一条NSLog语句,并且正在调用它。我还在发布之前写出了保留计数,并将其设置为_dataController的nil。保留计数是1.

所以这使我回想起为什么我没有看到内存使用量的显着下降。我想我需要更好地理解仪器中的ObjectAlloc显示,以及我的应用程序中最大的内存分配位置。在寻找这方面的帮助后,我很沮丧地试图从仪器确定发生这种情况的原因。我可以看到有3.54 MB的“All Allocations”和608 MB的Malloc 32.00 KB。如果我深入了解Malloc,我只会将负责的调用者视为像png_malloc和inflateEnd这样的框架调用。我正在寻找负责Malloc的代码中的调用,但我没有看到。这一切都是说我不知道​​是否释放了一些对象或对象,这些对象或对象对于低内存条件下的内存使用量会产生重大影响。我想我需要一个深入的仪器教程。苹果帮助文档没问题,但代码示例会更有帮助。