新しいView Controllerサブクラスを作成するたびに、Xcodeは自動的にメソッドを追加します
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated
}
通常、私はそれを削除するか無視します。これは、私が見たすべてのチュートリアルでも行うことです。しかし、私はXcodeが毎回それを私に与えるので、それはいくぶん重要であると思いますよね?ここで何をすべきですか?リソースの破棄とは、nilに設定することを意味すると思いますが、「再作成可能なリソース」とは正確には何ですか?
私はこれらの質問を見ました:
しかし、それらはすべてPre-Swiftです。 Objective-Cについてはあまり知りませんが、メモリ管理が異なると聞きました。 didReceiveMemoryWarning
ですべきことにどのように影響しますか?
その他の注意事項:
didReceiveMemoryWarning
の- ドキュメント はかなり短いものでした。SwiftはObjective-Cと同じようにARCを使用します( source to Apple Docs )。メモリの解放には同じ種類の規則が適用され、オブジェクトへのすべての参照を削除します。そして、割り当てが解除されます。
リソースの破棄とは、nilに設定することを意味すると思いますが、「再作成可能なリソース」とは正確には何ですか?
「再作成可能なリソース」は、実際にアプリケーションに依存します。
あなたはたくさんの写真を扱うソーシャルメディアアプリだとしましょう。すばやくスクロールできるように、メモリ内の次の20枚の写真をキャッシュするために、きびきびしたユーザーインターフェイスが必要です。これらの画像は常にローカルファイルシステムに保存されます。
さまざまなレベルの素晴らしいゲームを作成しています。ファンシーゲームエンジンにレベルを読み込むには時間がかかるため、ユーザーが十分なメモリを持っている場合、レベル2をプレイしている間にレベル3を読み込むことができます。
LevelCache.sharedCache().nextLevel = nil
はすべてのメモリを解放します画面上にあるものの割り当てを解除しないでください。関連する質問に対するいくつかの回答を見ましたが、UIViewControllerのビューの割り当てを解除しました。画面からすべてを削除すると、クラッシュする可能性があります(私の意見では)。
ユーザーが編集中のドキュメントを開いている場合は、割り当てを解除しないでください。アプリが保存されずに作業内容を削除すると、ユーザーは非常に怒ってしまいます。 (実際には、それが発生した場合に備えて、おそらく何らかの緊急保存メカニズムが必要です)
ユーザーがすばらしいソーシャルメディアアプリの投稿を書いている場合、その仕事を無駄にしないでください。保存して、再度アプリを開いたときに復元してみてください。セットアップするのは大変ですが、これを行うアプリが大好きです。
最新のデバイスのほとんどがメモリ不足になることはめったにありません。システムは、バックグラウンドでアプリを強制終了して、フォアグラウンドで実行中のアプリのメモリを解放するという非常に良い仕事をします。おそらく、アプリを初期状態に開いたアプリをタップしたときに、アプリスイッチャーでアプリが「開いている」ことをご存じでしょう。 OSはメモリを解放するためにバックグラウンドでアプリを強制終了しました。この問題を回避する方法については、 State Restoration を参照してください。
大量の処理を行っていないときにアプリに一貫したメモリ警告が表示される場合は、最初にメモリリークが発生していないことを確認してください。メモリリークの検出は、この回答の範囲外です。 ドキュメント および チュートリアル 。
didReceiveMemoryWarning
が呼び出されると、アプリが使用しているメモリが多すぎることを意味し(デバイスのメモリと比較)、release any additional memory used by your view controller
アプリのメモリを削減します。メモリアプリがデバイスのメモリを超えると、iOSはすぐにアプリを強制終了します。 「再作成可能なリソース」とは、どこかで再作成できるものを意味します。現在は必要ありません(メモリに保存する必要はありません)。そして、didReceiveMemoryWarning
を取得したときに解放できます。
別の詳細トピックを次に示します。 iosアプリの最大メモリバジェット