2010-11-29 9 views
1

私のiPhoneアプリは、Apple自身のWeatherアプリのような共通の「ユーティリティテンプレート」に基づいています。iPhoneビューは何度も読み込まれましたが、決してアンロードされませんでしたか?

私は情報ボタンをクリックして、画面を反転させます。私は完了ボタンをクリックします...そしてそれは元に戻ってきます。その部分はすべてうまくいくようです。

私は私が私のフリップサイドフリップときのviewDidLoadとviewDidAppearが呼び出されて表示されません、私のFlipSideViewController.mにおける4つの方法

viewDidLoad 
viewWillAppear 
viewDidUnload 
viewWillDisappear 

のそれぞれにのNSLog()文を置いてきました。 その後、私は戻ってviewWillDisappearとviewDidUnloadを参照してください?

代わりに、私はviewDidUnload呼び出しを見ません。しかし、FlipSideにフリップするたびに別のviewDidLoadが表示されます。それは間違っている?

viewDidLoad 
viewWillAppear 
viewWillDisappear 

viewDidLoad 
viewWillAppear 
viewWillDisappear 

viewDidLoad 
viewWillAppear 
viewWillDisappear 

は、そのビューが3回を再読み込みを意味するものではありません...しかし、0回をアンロード:

何度も何度も、前後にめくり、私が見るのでしょうか? ここでは、一致するロード/アンロードと表示/消滅の方法はありませんか?

+1

フリップエフェクトのコードを投稿することはできますか?私はあなたがする必要がありますようにビューを削除していないと思う。 – vincent

答えて

7

私はあまりにも最初に考えましたが、明らかにそうではありません。

viewDidUnloadメソッドは、実際にはView Controllerがメモリ警告を受け取ったときにのみ呼び出されます。

にもかかわらず、ビューコントローラーがdeallocされたときにビューが解放されます。だから、

、あなたがviewDidUnloadでIB店のようなものをリリースしている場合、それは良いことだが、あなたは取得しない場合viewDidUnloadは通常の状況(すなわち、下に呼ばれることはありませんので、あなたは、同様deallocでそれらを解放する必要がありますメモリ警告)。

EDIT: は解放するviewあなたは自分のdeallocにスーパークラスUIViewControllerdeallocを呼び出す必要があります:あなただけと一緒にアンロードされるはずです、物事を解放する必要がviewDidUnload方法で

- (void) dealloc 
{ 
    // release your stuff, anything that you alloc or retain in your class 

    // then call `dealloc` on the super class: 
    [super dealloc]; 
} 

あなた通常、インタフェースビルダーのIBOutletに接続したものです。

- (void) viewDidUnload 
{ 
    // if the property was declared with the "retain" keyword, you can 
    // release it simply by setting it to nil like this: 
    self.myOutlet = nil; 
} 
+0

ビューコントローラー自体がまだ周囲にありますが、ビューがオフスクリーンである可能性があるため、*同じ*ビューコントローラーを再利用する(つまり解放しない)ことは、より頻繁に 'viewDidUnload'を呼び出すことになりますアプリケーションはそれをアンロードできます)。 –

+0

それでは、私のコードはviewDidUnloadの内部でどのように見えるのですか?また、deallocでは...正しく解放するには? (また、私はすでにリリースされているものをリリースしないでしょうか?) – Patricia

関連する問題