1

我有一个来自 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];
}

有人知道怎么修这个东西吗?谢谢你们!

4

1 回答 1

-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)。

于 2013-02-17T04:46:59.930 回答