Iphone 在内存不足的情况下,释放不会释放内存

Iphone 在内存不足的情况下,释放不会释放内存,iphone,memory-management,low-memory,Iphone,Memory Management,Low Memory,我正试图按照苹果的建议,通过释放我的dataController对象(在我的应用程序委托中引用)所使用的资源来处理内存不足警告(在WWDC 2009视频的会话416中找到),该对象包含大量字符串,可从plist读取: - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { [_dataController release]; _dataController = nil; NSLog([N

我正试图按照苹果的建议,通过释放我的dataController对象(在我的应用程序委托中引用)所使用的资源来处理内存不足警告(在WWDC 2009视频的会话416中找到),该对象包含大量字符串,可从plist读取:

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
   [_dataController release];
   _dataController = nil;
   NSLog([NSString stringWithFormat:@"applicationDidReceiveMemoryWarning bottom...      retain count:%i", [_dataController retainCount]]);
}      
但是,当我在Instruments中运行ObjectAlloc并模拟内存不足的情况时,我没有看到我的应用程序使用的内存减少,即使我看到NSLog语句被写出,并且对象的保留计数为零。我确实会将对应用程序委托的引用传递给一些视图控制器。但是上面的代码释放了对_dataController对象(包含plist数据)的引用,因此我希望释放内存


非常感谢您的帮助。

您确定app delegate是
\u dataController
的唯一所有者吗
-release
只会减少ref计数,除非ref计数降至零,否则它不会释放对象


如果
\u dataController
也属于其他对象,请向他们发送消息以释放它。

我正在仔细检查。谢谢你的意见!我确实重新阅读了苹果的内存管理文档,并且在我的DataController的dealloc方法中加入了一条NSLog语句,现在正在调用它。我还写下了释放前的保留计数,并将_dataController设置为nil。保留计数为1

所以这让我回到为什么我没有看到内存使用的显著减少。我想我需要更好地理解仪器中的ObjectAlloc显示,以及我的应用程序中内存分配最大的位置。在这方面寻求帮助后,我对试图从仪器中确定发生这种情况感到沮丧。我可以看到,“所有分配”有3.54MB,malloc32.00KB有608MB。如果我深入研究Malloc,我只会看到负责的调用方是框架调用,比如png_Malloc和inflateEnd。我在我的代码中寻找负责Malloc的调用,但我没有看到。所有这一切都表明,我想知道我是否正在释放一个或多个对象,这些对象将真正对低内存条件下使用的内存量产生重大影响。我想我需要一个深入的仪器教程。苹果的帮助文档还可以,但是一个带有代码的示例会更有帮助