Почему инструменты отмечают утечки памяти на UIColor и NSArray? - PullRequest
0 голосов
/ 14 июля 2010

Я не мог понять, почему этот код помечен как имеющий утечки памяти:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    MenuViewController *menuView = [[MenuViewController alloc] initWithNibName:@"MenuView" bundle:[NSBundle mainBundle]];
    navigationController = [[UINavigationController alloc] initWithRootViewController:menuView];
    navigationController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"livreto-verso-horizontal.png"]]; // memory leak here 47,1%
    [menuView release];
    BilheteViewController *rightView = [[BilheteViewController alloc] initWithNibName:@"BilheteView" bundle: [NSBundle mainBundle]];
    spliViewController.viewControllers = [NSArray arrayWithObjects:navigationController, rightView, nil]; // memory leak here 52,9%
    [window addSubview:spliViewController.view];

    [window makeKeyAndVisible];

    [rightView release];

    return YES;
}

Только строки, отмеченные проблемами:

navigationController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"livreto-verso-horizontal.png"]]

и

spliViewController.viewControllers = [NSArray arrayWithObjects:navigationController, rightView, nil];

Как я могу решить эту утечку?

Обновление 1

Выпущен метод dealloc приложения-делегата, и navigationController, и spliViewController:

- (void)dealloc {
    [navigationController release];
    [spliViewController release];
    [window release];
    [super dealloc];
}

Ответы [ 2 ]

1 голос
/ 14 июля 2010

Инструмент утечки показывает вам, где что-то, что протекает, было выделено.

То, что он говорит, после того, как вы присвоили эти значения, они никогда не были выпущены - что, похоже, означает, что ваш навигационный контроллер не освобождается, когда это должно быть.

0 голосов
/ 14 июля 2010

Возможно ли, что единственные ссылки на объекты, которые вы видите, протекают в других объектах, которые также протекают?

Например, вы размещаете контроллер навигации здесь:

navigationController = [[UINavigationController alloc] initWithRootViewController:menuView];

UIColor будет сохранен этим навигационным контроллером, когда вы назначите его backgroundColor.

Вы где-нибудь выпускаете ссылку на этот навигационный контроллер?

...