【问题标题】:Xcode Instruments Leak coming from UIDeviceRGBColor来自 UIDeviceRGBColor 的 Xcode Instruments 泄漏
【发布时间】:2013-02-17 04:40:12
【问题描述】:

我有一个来自 UIDeviceRGBColor 的泄漏。负责的框架是 +[UIColor allocWithZone:]。我没有使用 ARC。

泄漏来自以下方法。

- (void) lAction
{
MKCoordinateRegion mapRegion;
mapRegion.center = mapView.userLocation.coordinate;
mapRegion.span.latitudeDelta = 0.05;
mapRegion.span.longitudeDelta = 0.05;

[mapView setRegion:mapRegion animated: YES];

SettingsViewController *settingsViewController = [[SettingsViewController alloc] 
initWithNibName:@"SettingsViewController" bundle:nil];

泄漏来自下一行:

[self presentModalViewController: settingsViewController animated:YES];

然后这个方法就这样结束了:

self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:40.0/255.0 
green:43.0/255.0 blue:46.0/255.0 alpha:1.0];
}

有人知道如何解决这个问题吗?谢谢大家!

【问题讨论】:

  • 如果您在发布问题之间只需要等待 8 分钟,那么您应该尝试在发布之前更好地自己找到答案。
  • 非常感谢 - 试图深入记忆管理的星云。经历了大约一千次,正在从专家那里收集更多知识。
  • 您可以从我的帖子中看到我没有使用 ARC。你会建议我尝试转换我的项目吗?
  • @Brandon 你找到解决办法了吗?

标签: iphone ios objective-c xcode memory-leaks


【解决方案1】:

试试:

SettingsViewController *settingsViewController = [[[SettingsViewController alloc] 
initWithNibName:@"SettingsViewController" bundle:nil] autorelease];

为了让评论者满意,解释很简单,如果你不使用ARC,每当你调用alloc时,返回对象的保留计数设置为1。你负责释放它。一种简单的方法是在它上面调用 autorelease ,它将在主运行循环结束时自动释放它(除非你正在管理自己的自动释放池,但我不会进入那个)。您确实要确保只要您需要使用一个对象,您的代码就有保留它的东西,在这种情况下,当您调用时

[self presentModalViewController: settingsViewController animated:YES];

在 settingViewController 上调用了一个额外的保留,因此您不必担心在您的方法完成时它会被释放。

我发现 Objective-C 中的内存管理非常简单,但它确实需要额外的代码,而且现在每个人都使用 ARC。如果您只是对现有代码库进行一些小的更改,则无需切换到 ARC,但如果您要继续使用代码库一段时间,切换会更省时.这很简单,因为 Xcode 将为您完成大部分工作。 (见这里:http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html)。

【讨论】:

  • 这不是答案。请提供有关如何解决此问题的说明。否则,这将更适合作为评论。
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 2011-10-10
  • 2012-08-22
  • 2012-01-05
  • 2016-01-10
  • 2012-05-30
相关资源
最近更新 更多