2011-03-17 59 views
0

我的应用程序正在加载第一个视图(用于登录到Web服务)。当登录成功时,它执行CATransition(基本kCATransitionFromRight)来显示第二个视图并隐藏第一个视图。我已经将过渡的代表设置为自我,因此我可以使用-(void)animationDidStop:(CATransition *)theAnimation finished:(BOOL)flag在CATransition之后释放视图控制器:我正在做这个对吗?

当这个方法被调用(在转换结束后),我想释放第一个视图,因为我不再需要它了。但是,当我拨打[firstView release](在animationDidStop:)时,保留计数似乎没有变化。我用[loginView retainCount]来检查这一点,因为我知道它并不总是可靠的,我想知道:我做对了吗?

谢谢。

+2

每次有人使用'retainCount',上帝杀死一只小猫。它应该真的被避免。至于你的问题,你是否从其超级视图中删除第一个视图? – Jilouc 2011-03-17 10:37:53

回答

0

Jilouc在他的评论是正确的,忘记检查“retaincount” ......

如果你想确保你的对象视图的firstView只需添加一个

NSLog(@"i'm removing myFirstView"); 

在其

-(void)dealloc{ 
} 

方法...

如果你得到的NSLog在调试器控制台窗口,那么一定你有它删除/以正确的方式释放...

...顺便说一句正确的方式可能是这样的:在

animationDidStop:

if (firstView!=nil){ 
    [firstView.view removeFromSuperview]; 
    [firstView release]; 
    firstView=nil; 
} 
+0

我在第一个视图的dealloc方法中添加了一个NSLog。当我设置我的animationDidStop方法时,我可以看到它被调用,但之后应用程序崩溃了,我不知道为什么。 – DrMonkey68 2011-03-17 12:00:54

+0

@Maxime Bornemann:何时何地崩溃?如果你的dealloc方法被调用,那么你的类的实例被释放,并且不再可见,所以它的视图,子视图和所有在它内部创建的对象......所以,如果在你尝试“调用”它之后,可能会发生崩溃(或它的一个属性)。例如:如果你打电话给[firstView.view.center]; ...尝试捕捉应用程序崩溃的位置... – meronix 2011-03-17 12:44:40

+0

你说得对。一些旧的代码试图在转换后操作视图。现在一切正常,谢谢。 – DrMonkey68 2011-03-17 14:43:08

1

摘自“Cocoa Touch for iPhone OS 3”是一个类似的方法。
他们设置了一个动画删除旧的子视图,添加新的,然后提交动画。

相关问题