2013-02-17 3 views
0

У меня есть утечка из UIDeviceRGBColor. Ответственный кадр + [UIColor allocWithZone:]. Я не использую ARC.Xcode Instruments Утечка из UIDeviceRGBColor

Утечка исходит из метода ниже.

- (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]; 
} 

Кто знает, как это исправить? Спасибо вам всем!

+2

Если вы собираетесь подождать 8 минут между отправкой вопросов, вам следует попытаться лучше найти ответы перед публикацией. –

+0

Спасибо большое - пытаюсь нырнуть в туманность памяти мгм. Прошло около тысячи рубок, и я собираю больше знаний у экспертов. – Brandon

+0

Вы можете видеть из моего сообщения, что я не использую ARC. Вы порекомендовали бы, чтобы я попытался преобразовать свой проект? – Brandon

ответ

0

Try:

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

Для того, чтобы удовлетворить комментатора, объяснение просто, что если вы не используете ARC, всякий раз, когда вы называете alloc, тем сохранить количество возвращенного объекта устанавливается в 1. Вы несете ответственность за его освобождение. Один простой способ сделать это - это автоответчик на нем, который автоматически освободит его в конце цикла основного запуска (если вы не управляете собственным пулом автозаполнения, но я не буду в этом разбираться). Вы хотите, чтобы убедиться, что до тех пор, как вам нужно использовать объект ваш код имеет что-то сохранить его, в этом случае, когда вы звоните

[self presentModalViewController: settingsViewController animated:YES]; 

дополнительно сохранить называется на settingViewController, так что вы не должны беспокоиться о том, что он будет освобожден, когда ваш метод закончится.

Я считаю, что управление памятью в Objective-C довольно просто, но для этого требуется дополнительный код, и каждый использует ARC в наши дни. Если вы просто вносите несколько небольших изменений в существующую базу кода, нет необходимости переключаться на ARC, но если вы собираетесь продолжать работать с базой кода в течение некоторого времени, будет более эффективным время для переключения , Это довольно просто сделать, поскольку Xcode сделает большую часть работы за вас. (См. Здесь: http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html).

+2

Это не ответ. Просьба дать объяснение относительно того, как это решает эту проблему. В противном случае это лучше всего подходит для комментариев. –

Смежные вопросы