【发布时间】:2011-08-01 19:41:00
【问题描述】:
所以这让我困惑了一段时间。我在“配置文件”模式下运行我的应用程序,试图在我的应用程序中找到内存泄漏。当我单击应用程序的 Map 部分时,我想我得到了所有人的期望,它报告了对 NSAutoreleasePool 的引用从 Foundation Library 泄漏。我检查了对象的踪迹,但它只从方法allocWithZone 报告回来。无论我alloc 和dealloc 那个视图控制器多少次,它似乎只泄漏一次。我搜索了我的代码,我对NSAutoreleasePool 的唯一引用是在 main.m 文件中。这是 Apple 的错误(我对此表示怀疑)还是我做错了什么?
main.m
#import <UIKit/UIKit.h>
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
【问题讨论】:
-
如果您尝试存档(确保将其设置为为 iOS 设备构建),它将指出您的代码内存泄漏发生的位置。这是一种解决方法,但它帮助我找到了许多我无法通过堆栈跟踪找出的神秘错误。
-
签入您的地图部件类文件,您正试图释放该类文件中可能引用其他类文件的任何对象,反之亦然。通过在您的 dealloc 或 viewDidUnlaod 或您要释放对象的任何位置逐行注释来检查它。
标签: iphone objective-c ios memory-leaks