1

在管理添加和删除 uiviewcontroller 的总内存方面存在一些基本问题 - 但仅当我使用 CAtransition 向其添加动画时。我在下面的情况下设置了一个简单的场景:

我有一个基本的视图控制器,我 init/alloc 称为 IVC,我添加到当前的 uiController:在头文件中,它只是简单地声明:

IntroViewController* IVC;

开始时:泄漏中显示的总内存为 3mb

3.6mb 总内存

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

正如预期的那样,总内存回到 3mb

但是当我删除发布代码并添加以下内容以便淡入然后释放此处显示的对象时:

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.6MB 泄漏?为什么会发生这种情况?我不分配动画*,所以我觉得不需要清理,但这表明某些东西仍在我的 IVC 视图中

非常感谢任何帮助。

4

1 回答 1

-1

试试applicationIntroLoadViewIn.removedOnCompletion = YES;你的 CATransition 设置代码片段!

于 2012-08-20T08:00:23.433 回答