【问题标题】:iPhone app memory leaks from core frameworksiPhone 应用程序内存从核心框架泄漏
【发布时间】:2011-03-04 06:09:34
【问题描述】:

这些泄漏是否正常?它们是虚假泄漏还是我应该关心的事情?仪器工具没有从我的应用程序中给我任何代码行,似乎 Apple 的框架正在泄漏?! alt text http://www.freeimagehosting.net/uploads/d50bdb5dec.png

好吧,问题只能从这里来:

  • (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {

    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"ProjectDetailView" bundle:[NSBundle mainBundle]];

    项目 *project = [projectsArray objectAtIndex:indexPath.row];

    [detailViewController setProject:project];

    [detailViewController setTitle:[项目名称]];

    [self.navigationController pushViewController:detailViewController Animation:YES];

    [detailViewController 发布];

}

或来自详细视图的 viewWillAppear 事件:

  • (void)viewWillAppear:(BOOL)动画{

    [super viewWillAppear:animated];

    [项目名称 setText:[项目名称]];

    [appDefStatement setText:[项目 appDefStatement]];

    [projectDesc setText:[project desc]];

    NSMutableArray *theSketches = [[NSMutableArray alloc] initWithArray:[project.sketches allObjects]];

    [self setSketchesArray:theSketches];

    [草图发布];

    if([sketchesArray 计数] == 0) {

    [tView setHidden:YES];  
    

    } 否则 {

    [tView setHidden:NO];
    

    }

}

【问题讨论】:

  • 发布您的一些代码。另外,你是在设备上分析吗?有时,模拟器并不准确。
  • 我在设备上做是的。代码相当冗长乏味:)。但基本上我只是使用 TableView 和导航栏作为我的根控制器,然后用户可以选择一个单元格,将它们带到带有两个 TextField、一个 TextView 和另一个 TableView 的详细视图。如果用户在该表视图中选择了某些内容,他将再次被发送到带有 TextField 和 TextView 的详细视图。我没有对那些文本字段和文本视图做任何令人毛骨悚然的事情,它们只是附加了一个“更改”操作,当触发时通过 Core Data 将数据保存在磁盘上。

标签: iphone memory uikit memory-leaks


【解决方案1】:

我认为这些是虚假的泄漏。其中一个漏洞甚至出现在 Apple 文档中的一行代码(cellForRowAtIndexPath 中试图获取可重用单元格的行)。所以我的猜测是泄漏仪器并不完美。我已经多次检查我的代码,并确保我正在释放所有已分配/复制/保留/可变复制等的内容。

【讨论】:

  • 我不会在这件事上停留太久,因为我也发生过同样的事情。我在AVAudioPlayer 中发现了由 Apple 代码导致的漏洞,我对此无能为力,因此最好继续前进。至少现在你有更多的泄漏经验!
【解决方案2】:

虽然某些苹果代码可能存在泄漏,但您在此处看到泄漏这一事实并不意味着实际上存在泄漏。例如,可能是你从苹果的框架中分配了一些东西,然后你没有正确释放。

希望这会有所帮助。

问候

【讨论】:

  • 我意识到这一点,只是看不出发生了什么。我双重/三重检查,我似乎释放了所有需要释放的东西......
【解决方案3】:

很少有泄漏来自 Apple 源代码的情况,所以我首先要说第一件事:

  1. 无论何时使用alloc,您都需要在以后安全的时间释放您创建的任何对象
  2. 确保在 .m 文件中合成的所有对象都在 dealloc 调用中释放
  3. 阅读这篇关于内存管理的有用(尽管很无聊)的文章:http://developer.apple.com/iphone/library/documentation/cocoa/conceptual/memorymgmt/memorymgmt.html
  4. 在 Leaks http://www.mobileorchard.com/find-iphone-memory-leaks-a-leaks-tool-tutorial/ 上浏览这个很好的例子

附:如果不发布您的代码,我们只能推测……通过发布可疑代码,您会得到更好的答案。

【讨论】:

  • 谢谢,我会研究这些文章。问题是要发布什么代码?我必须发布所有代码(而且很长),因为 Instruments 不会将我指向代码中的一行,它们只会向我显示其他人(即 Apple)编写的代码行。
  • 我将从您编写的处理表格和文本视图的代码开始。
猜你喜欢
  • 2018-08-07
  • 2011-03-15
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
相关资源
最近更新 更多