2017-06-14 4 views
0

サイズ

私はアプリを起動すると、私が通って移動して、私はメモリが上がる気づきます私はメモリが530MB

あるすべてのコントローラを介して移動した後、ビューコントローラは..ので、私の質問は以下のとおりです。 -

a)は、このは) Bを使用するメモリがたくさんある私は を心配する必要がありますc)どのように私はラウンドを移動すると、メモリからビューコントローラを削除することができます..私はボーのためのビューコントローラを持っているいくつかのクリックをスキップしたり開始したりすると、次のView Controllerにセグメントするので、理論的にはそれ以上ロードする必要はありません。

思考?

私は3Gbmを持つiPhone 7 Plusで動作していますが、iPhone SE以降の他の携帯電話モデルでこのアプリケーションを実行できるようにしたいと考えています。しかし私は、メモリプロファイルは何のiPhone SE約50%ではないに気づくが、thatsのを想定して、プラスあたりの電話としてX3の画像を読み込まないので

答えて

1

a)は、これが

を使用するメモリがたくさんあります

ロットは相対的な用語で、530Mbが多くあるかどうかは、アプリが何をしているのか、アプリの種類に依存します。豊かなグラフィックスを備えたゲームなら、私は心配することはありませんが、それは普通のユーティリティアプリであれば心配です!

b)は、私が心配する必要があります

メモリが蓄積取得/ユーザーはアプリの各種画面をロードして増加することは非常に一般的なシナリオです。それが増え続けると、あなたは悩まされるべきです。 VCが読み込まれるたびに、重いグラフィックスが読み込まれるか、大量の変数が割り当てられ、その機能を実行するために多くのメモリが消費される可能性があります。それはかなり公平です。しかし、ユーザーがアプリケーションナビゲーションスタックからVCをポップすると、VCによって割り当てられたすべてのメモリが返され、アプリケーションによって消費された総メモリが低下するはずです。理想的なメモリフットプリントは、ピークに達してVCが飛び出すと波のように見えます。ザッツは起きていない場合、私はラウンド

  1. ために適切ナビゲーション技術をナビゲートするよう、あなたはトラブル:)

    C)私はメモリからのView Controllerを削除する方法です。実際にそのVCインスタンスをメモリに保持する必要がある場合を除いて、VCをナビゲーションコントローラスタックにプッシュし続けることは避けてください。すべてのVCのpush to navigationスタックは、ユーザーがアプリを強制終了するか、iOSがメモリ警告を受け取ってアプリを強制終了するまで、メモリ内に保持され続けます。

  2. 各VCにdeinit/deallocと書いて、押された場合は戻るボタンをタップするか、それがモーダルで表示されている場合はVCを破棄することによってVCがポップするたびに呼び出されるようにします。各VCのdeinitが呼び出される保証することは、VCが不要なメモリを保持していないことを確認するための最良の方法です。

  3. は、あなたのVCのどれもサイクルを維持し、永遠にメモリ内のオブジェクトを保持し、その結果、コードを持っていないことを確認してください。例:あなたのVCがブロックを宣言し、ブロックへの強い参照を保持し、ブロックをブロックするために自己を渡すと、自己は決して解放されません。保持サイクルの古典的な例。あなたのコードがそのようなデッドロックを作成しないようにしてください。

  4. 強力/

  5. urlアプリケーションでメモリーリークがないことを確認するために、各オブジェクトのメモリーリークと参照カウントを見つけるためにinstrumentを使用してください。

+0

@ sandeep-bhandaripp情報をいただきありがとうございます...さらに多くの質問があります。初心者のビットですが、適切なナビゲーションテクニックはどういう意味ですか?私は単一のビューのアプリケーションを作成し、さまざまなVCを追加し、それらの間に密接な、それは間違っている? ARCについても読んでいますが、私はVCが手放すだろうと思っていますが、私はスイフト3を使っています。 – user2596590

+0

@ user2596590:push/show segue View Controllerを使用している場合、ナビゲーションスタックにプッシュされます。ナビゲーションスタックにプッシュされたビューコントローラは、ユーザーが戻るボタンをタップしてViewControllerをポップしたり、アプリケーションを終了したりするまで解放されません。実際にVCを持続させ、ユーザーがタップしてその画面に戻ることができるようにするには、プッシュを使用する必要があります。 loginVCを押すと、loginVCも永続化されますが、ログインは1回だけ使用されます。プッシュを使用してログインすると、その画面に戻ることはできません。 –

+0

VCそれがモーダルセグを使用し続けることを望んではいけませんし、一度使用してしまえばそれを取り除いてVCをメモリに保存することはありません。同様に、ユーザがプッシュされたVCの戻るボタンをタップし、VCをナビゲーションスタックからポップするたびに、VCのdeist/deallocが呼び出されます。それが呼び出されることを確認してください。それが呼び出されていない場合は、あなたのVCが解放されていないものによってVCが保持されていることを意味します。したがって、記憶は下がらないでしょう。 –