2012-01-31 232 views
0

我是新来的Xcode 4.2,由于我的项目几乎完成,我想我会尝试一些苹果提供的工具。所以,我跑Leak,显然,它直接在应用程序启动时发现泄漏。我得到的“泄漏”部分固体橙色竖线,当我调查,看来这是罪魁祸首:Autoreleasepool内存泄漏?

int main(int argc, char *argv[]) 
    { 
     @autoreleasepool { 
//problem appears on the line below in Orange 
      return UIApplicationMain(argc, argv, nil, NSStringFromClass([TestProjectAppDelegate class])); 
     } 
    } 

由于我是新来这个,我不知道是什么问题,如何解决它,或者即使我找到真正的问题!

(是不是有应该是一个“漏”打电话的地方?)

任何帮助将不胜感激。

编辑 链接截图文件:http://whoit.home.comcast.net/~whoit/combined.jpg (太大嵌入)

+0

您是否试过钻取仪器显示屏? – Abizern 2012-01-31 16:27:06

+0

是的,但由于我是新手,对我来说这并不意味着什么。 – wayneh 2012-01-31 16:39:14

+0

不幸的是 - 因为我看不到你的屏幕 - 这对我来说也没有任何意义。 – Abizern 2012-01-31 16:42:22

回答

2

点击invert call tree在泄漏的选项窗格。

而且也,也许你可以添加截图为这种观点如果可能的话:

Leaks

+0

已经这样做了,但我不知道我在看什么... – wayneh 2012-01-31 16:40:33

+0

您是否介意在添加屏幕截图将这些呼叫树扩大到泄漏? – ZhangChn 2012-01-31 16:51:04

+0

好吧,我刚刚添加了一个链接到我的原始文章的截图图像。谢谢。 – wayneh 2012-01-31 20:33:07

0

与此更换整个@autoreleasepool块:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([TestProjectAppDelegate class])); 
[pool release]; 

return retVal; 

如果仍然出现相同的泄漏,那么你的代码中的其他地方就会出现过度保留问题,这一部分不是问题。如果你不是仍然看不到(不太可能),那么这种新的语言结构可能会出现问题。极不可能的,但这是一个新的构造,所以肯定会有错误。

+0

不能这样做 - 我正在使用ARC,编译器抱怨你的代码。 – wayneh 2012-01-31 22:15:59

+0

@wayneh - 啊,对,如果你使用ARC。泄漏工具也可能没有完全更新以了解新的ARC系统,并且错误地报告泄漏。 – DougW 2012-01-31 22:53:48