2012-03-14 6 views
2

私たちは常に、コードを書いたり、次のメモリ空きリークしてコードを維持し、iOS 5のUIviewControllerオブジェクトを解放しますか?

if(myViewControllerObject != nil){ 
    [myViewControllerObject.view removeFromSuperView]; 
    [myViewControllerObject release]; 
    myViewControllerObject = nil; 
} 
myViewControllerObject = [[MyViewControllerObject alloc] initWithNibName:@"MyViewControllerObject" bundle:nil]; 
    [self.view addSubview: myViewControllerObject.view]; 

しかし、iOSの5に我々はリリースを使用することはできませんのiOS 5で 以前のiOSバージョン(> 5.0)のUIViewControllerオブジェクトを解放したいです UIviewControllerオブジェクトをリリースするためのメソッド次に、余分なオブジェクトの割り当てとリークを維持するためにiOS 5で何をしなければなりませんか? この階層を実装する最善の方法は何ですか?

ありがとうございました。

答えて

0

プロジェクトの自動参照カウントを有効にしない限り、コードはiOS 5に変更されません。システムがメモリ管理を処理するため、releasedeallocなどを使用することはできません。自動的に低メモリの間にnilにこのプロパティを設定することができますHow does the new automatic reference counting mechanism work?

+0

私たちが解放されていないなら、オブジェクトはクラッシュのチャンスではありませんか? –

+0

いいえ、オブジェクトを解放しないと、不要なメモリ消費とメモリリークの可能性があります。しかし、私が言ったように、ARCを使うことでこれを防ぐことができます - リリースは自動的に(多かれ少なかれ)実行されます。この方法で 'release'文を自分で書く必要はありません。 –

0

ARC(自動保持/参照カウント)を使用している場合は、releaseをまったく使用する必要はありません。コンパイラはすべての保持をカウントし、それらを自動的に解放します。そのガベージコレクションではありませんが、コンパイラはオブジェクトがそれ以上使用されていない場所で動作し、自動的にリリースを追加します。

あなたの質問に答えて、ちょうどそれを残して、コンパイラはそれを並べ替えるでしょう。

+0

の下に参照してくださいおかげでトーマスは私に私はウル答えはまた、許容理解し、簡単な説明.... NW :) – Tirth

+1

を提供するが、弧を強制しますこれを解放するには、 'myViewControllerObject = nil;'を使用します。 – Simon

+0

私たちが解放されていなければ、オブジェクトはクラッシュするチャンスではありませんか? –

0

あなたは

[myViewControllerObject.view removeFromSuperView]; 

のUIViewControllerクラス(myViewControllerObjectの基底クラス)を呼び出すべきではありません。

はARCの詳細については、この質問を参照してくださいビューコントローラ自体が最終的にリリースされたときにも発生します。

だから、これは

[myViewControllerObject release]; 
myViewControllerObject = nil; 

更新問題ないはず:ARCは答え

関連する問題