Управление памятью iPhone и CATransition

Возникли некоторые основные проблемы с управлением общей памятью при добавлении и удалении контроллера uiview, но только когда я добавляю к нему анимацию с помощью CAtransition. Я создал простой сценарий ниже ситуации:

У меня есть базовый контроллер представления, который я инициализирую/распределяю по имени IVC, и я добавляю к текущему uiController: В заголовочном файле он просто объявлен:

IntroViewController* IVC;

В НАЧАЛЕ: 3 МБ общей памяти, показанной в утечках

3,6 Мб общей памяти

IVC=[[IntroViewController alloc] initWithNibName:@"Intro" bundle:[NSBundle mainBundle]];
[IVC.view setUserInteractionEnabled:YES];   
[self.view addSubview:IVC.view];

затем я выпускаю:

[[IVC.view layer] removeAllAnimations];
[IVC.view removeFromSuperview];//remove intro animation
[IVC release];

как и ожидалось, общая память возвращается к 3 МБ

но когда я удаляю код выпуска и добавляю следующее, чтобы появилось постепенное появление, а затем выпустить объект, показанный здесь:

CATransition *applicationIntroLoadViewIn = [CATransition animation];
[applicationIntroLoadViewIn setDuration:.5];
[applicationIntroLoadViewIn setType:kCATransitionReveal];
[applicationIntroLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
[applicationIntroLoadViewIn setValue:@"IntroFadeIn" forKey:@"IntroAnimation"];
[applicationIntroLoadViewIn setDelegate:self];
[[IVC.view layer] addAnimation:applicationIntroLoadViewIn forKey:nil];

а потом :

я создаю метод для обработки, когда анимация закончилась:

- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)flag{
NSString* value = [animation valueForKey:@"IntroAnimation"];

if ([value isEqualToString:@"IntroFadeIn"]){
    //this def gets called NSLog shows up
    [[IVC.view layer] removeAllAnimations];
    [IVC.view removeFromSuperview];//remove intro animation
    [IVC release];
    IVC=nil;
}

сообщений об утечках нет, представление удалено, но памяти в утечках по-прежнему остается 3,6 МБ? ЛЮБАЯ причина, по которой это могло произойти? Я не выделяю анимацию *, поэтому я чувствую, что ее не нужно очищать, но это говорит о том, что что-то все еще держится за мое представление IVC.

Любая помощь очень ценится.


person yeahdixon    schedule 30.07.2010    source источник


Ответы (1)


Попробуйте applicationIntroLoadViewIn.removedOnCompletion = YES; во фрагменте кода установки CATransition!

person Nenad M    schedule 20.08.2012
comment
значение по умолчанию для removeOnCompletion уже равно YES, эта строка кода бесполезна - person Jerome Diaz; 22.08.2013