Управление памятью iPhone и CATransition - PullRequest
1 голос
/ 30 июля 2010

Имеются некоторые основные проблемы с управлением общей памятью от добавления и удаления контроллера 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

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

1 Ответ

0 голосов
/ 20 августа 2012

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

...