16

私は最初のアプリを起動しようとしている新しい開発者です。私はAppleのiOSの6のリリースノートに以下のようviewDidUnloadの廃止について困惑している:iOSの6でiOS 6 viewWillUnloadの廃止予定&didReceiveMemoryWarningへの移動

、 のUIViewControllerのviewWillUnloadとviewDidUnload法が廃止されています。これらのメソッド を使用してデータを解放する場合は、代わりにdidReceiveMemoryWarningメソッドを使用してください。 は、ビュー コントローラのビューが使用されていない場合は、このメソッドを使用してビューへの参照を解放することもできます。これを行う前に、ビューがウィンドウ内にないことをテストする必要があります( )。

どうしてですか?この変更によってアプリケーションでパフォーマンスの問題が発生しないように、私はどのようなガイドラインを守るべきですか?

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

+0

ような何か? –

答えて

17

Appleによると、彼らはviewWill/DidUnloadのものを破壊することによって得られる利益が最小限に抑えられるほど、ビューの内部メモリ管理を改善しました。さらに、彼らは、アプリケーションがこれらの通知を適切に処理しないため、多くのアプリケーションがクラッシュし、ビューのアンロードに関連付けられていない他のものを実行することを示唆するデータを持っています。

最後に、メモリの不足のためにアプリが終了する前に最初に覚えている唯一の警告としてメモリ警告が確認されるため、実際にメモリの問題を処理する場所になります。

基本的には、viewWillUnloadviewDidUnloadのメソッドを削除するだけです。 didReceiveMemoryWarningとその他の適切な場所にある他のView Controller管理のメモリの問題を処理します。

EDIT私が聞いても

:それらの "appropiate場所は" 何ですか?私は ViewdidUnloadを使用していましたが、[Will/Did] Disappearビューが完全に適切ではない場合がありました。さらにコントローラのスタック のナビゲーションに行くように。それについてもっと詳しく教えてもらえますか? - Dan1one

私はそれがあなたが聞きたいものではないことを知っていますが、それは真実です:-)

一般に、あなたは非対称性を避けるべきです。したがって、元の "した"対称方法を使用して操作を元に戻す必要があります。一般的にviewDidUnloadタイプの作業はすべてdidReceiveMemoryWarningdeallocで実行できるはずです。

これらの場所の両方で大部分のコードを複製しなければならないため、これは実際には変更を行わないはずです。

「ナビゲーションコントローラのスタックをさらに下に行く」という意味はわかりませんので、役に立つ例を明確にする必要があります。

viewDidDisappearviewDidAppearを使用したときの問題の1つは、実際に表示されていたとき、またはその上に表示されていたビューが消えていたために表示されたときを知るのが難しいということでした。 。APIの

これらの作品は、あなたがこれらの問題に対処することになっている:iOSの6で

- (BOOL)isMovingFromParentViewController 
- (BOOL)isMovingToParentViewController 
- (BOOL)isBeingDismissed 
- (BOOL)isBeingPresented 
+0

私は尋ねるかもしれません:これらの "適切な場所"は何ですか?私はビュー[Will/Did] Disappearが完全に適切ではなかった特定の状況でViewdidUnloadを使用しました。ナビゲーションコントローラのスタックをさらに下に行くように。それについてもっと詳しく教えてもらえますか? – Dan1one

+0

@ Dan1one:um ... 'viewDidUnload'は、スタックからポップされたり、他のほとんどの状況で呼び出されたりしません。だから私はあなたが何をしていたか分かりません – user102008

+0

私は数ヶ月間見た最も大きな答えです。ありがとうございました! –

8

は、ビューがアンロードされることはありません。

これは、loadViewviewDidLoadが一度だけ呼び出され、viewDidUnloadが呼び出されないことを意味します。したがって、ビューコントローラがviewDidUnloadを使用してメモリ不足状態を処理する場合は、変更する必要があります。

低メモリ条件に対応する場合は、didReceiveMemoryWarningを実装し、この方法で一時データとオブジェクトを解放します。私たちは私たち自身でビューを解放しなければならないのiOS 6で

6

は、あなたが現在お使いのアプリで用viewDidUnloadを使用しているこれは何

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 

    if([self isViewLoaded] && self.view.window == nil) 
    { 
     self.view = nil; 
    } 
} 
関連する問題