【问题标题】:MemoryLeak in iphone programming?iPhone编程中的内存泄漏?
【发布时间】:2011-10-01 08:23:18
【问题描述】:

谁能帮我理解这张图片中的问题

【问题讨论】:

  • 这很简单,只需在关闭大括号之前释放locs。我想说,真的!这是你想问的?

标签: iphone memory-management memory-leaks analysis


【解决方案1】:

正如分析器所说,您在第 647 行分配 locs,使用
NSMutableArray *locs = [[NSMutableArray alloc] init]; 并且稍后不会释放它块。你应该释放它,或者你可以使用方便的构造函数来获取这样的自动释放数组,NSMutableArray *locs = [NSMutableArray array];

我建议您仍然将代码简化为这样,

NSMutableArray *annotations = (NSMutableArray *)[map annotations];
[annotations removeObject:[map userLocation]];
[map removeAnnotations:annotations];

【讨论】:

  • 你能看到注释行吗,我看到了,但是后来 EXC_BAD_ACCESS :-(
  • 即使我尝试了 removeAllObjects 和 release/nil,但都产生了 EXC_BAD_ACCESS
  • 在 int retVal = UIApplicationMain(argc, argv, nil, nil); 处使用您的代码 EXC_BAD_ACCESS;
  • 问题应该出在其他地方。不在您显示的代码中。
【解决方案2】:

你需要在最后释放 locs。您已分配并初始化它,给它一个引用计数 1,然后您应该释放它以将引用计数更改为 0。有关更多信息,请参阅 http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/

【讨论】:

  • 只试一下 [locs release]; - 其他两行是不必要的。
【解决方案3】:

您已经初始化了 locs 数组,然后您必须在关闭该函数之前释放该数组:[locs release];locs=nil;

【讨论】:

  • 你能看到注释行吗,我看到了,但是后来 EXC_BAD_ACCESS :-(
  • 即使我尝试了 removeAllObjects 和 release/nil,但都产生了 EXC_BAD_ACCESS
  • 我认为你将自动释​​放对象添加到 locs 数组中,只有在这种情况下才会发生这种情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 2011-12-10
  • 2011-05-24
  • 2023-03-20
相关资源
最近更新 更多