2011-03-17 17 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」是一個類似的方法。
他們設置了一個動畫刪除舊的子視圖,添加新的,然後提交動畫。

相關問題