gpt4 book ai didi

objective-c - 仪器和内存泄漏

转载 作者:行者123 更新时间:2023-11-29 13:47:12 26 4
gpt4 key购买 nike

我正在使用 XCode 仪器中的泄漏工具来查找内存泄漏(请看图)。每次我在应用程序的不同点运行我的应用程序时,我都会有一些泄漏。我查看了扩展的细节,但我从未指出我编写的任何代码,只有 xcode 基础中内置的代码。这方面的两个例子是:

http://imageshack.us/photo/my-images/192/screenshot20110728at102.png/

http://imageshack.us/photo/my-images/853/screenshot20110728at102.png/

如您所见,一些问题来自 Message UI 库。我唯一使用的地方是这里:

-(void)displayComposerSheet
{
MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
mail.mailComposeDelegate = self;

[mail setSubject:@"Suggestions"];

[mail setToRecipients:[NSArray arrayWithObjects:@"sampleEmail@gmail.com", nil]];
[self presentModalViewController:mail animated:YES];
[mail release];
}

-(void)launchMailAppOnDevice
{
NSString *recepient = [NSString stringWithFormat:@"mailto:sampleEmail@gmail.com"];
recepient = [recepient stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:recepient]];
}

-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
[self dismissModalViewControllerAnimated:YES];
}

我该如何解决这个问题?谢谢!

最佳答案

找出泄漏的来源并不总是一件容易的事,远程帮助则更为复杂。

在您的情况下,泄漏的内存地址旁边显示的小箭头可能会有所帮助。如果单击它,您应该会看到一个信息 Pane ,其中包含当时的完整堆栈跟踪。检查此处显示的方法列表并查找您的方法,然后单击它以检查代码。

在 Instruments 中,您无法做很多其他事情来了解泄漏对象的创建位置。然后你应该找出你可能错过发布它的地方。

关于 Apple SDK,有一些内存泄漏报告,您可以在网上找到,但它们很少见。

如果 Instruments 没有帮助您,您需要考虑的一个重要因素是:当 Instruments 报告泄漏时,您的应用正在做什么?从 Web 检索数据、显示新 View 等等……这可能有助于划定您进一步调查的领域。如果泄漏多次出现,这对于确定您的程序的哪一部分可能产生它也很有值(value)。

如果您对此有所了解,请检查实现该功能的代码。一种技术(我知道这听起来可能很奇怪,但请尝试一下)是删除/注释掉代码块,然后检查泄漏是否仍然存在。

“删除/注释掉代码块”可能意味着很多事情,从不发出网络请求,到避免使用一种类型的类并将其替换为另一种类型。这并不总是一个简单的过程,因为您会损害应用程序的功能,因此您必须使用您的知识来了解如何删除功能并让您的应用程序“可测试”。如果幸运的话,这可以帮助您进一步定界导致泄漏的代码。

请记住,静态分析工具也有帮助,泄漏并不完美,有时是错误的。还有另一种发现泄漏的技术不是基于泄漏,而是基于对象分配。根据我的经验,这是非常强大的,我强烈建议您也尝试一下,尽管我怀疑它在这种情况下无济于事。它叫做heapshot analysis .

关于objective-c - 仪器和内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6860670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com