問題タブ [viewdidunload]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - 同じuiviewcontrollerをiphoneで再び開くと、メモリが増え続けます
私は2つのuiviewcontrollerを持っていて、deallocですべてのリソースを解放し、didunloadでそれらをnilに設定していますが、それでも両方のviewcontrollerに出くわしたとき、メモリは増え続けます。
私はこの投稿から使用されたメモリと空きメモリを追跡しています
なぜこれが起こっているのか誰かが提案できますか?
これは2番目のビューコントローラです。
ios - Apple は手動で viewDidUnload を呼び出すアプリを拒否しますか
viewDidUnload は iOS6 では呼び出されなくなったため、viewDidUnload で必要なことを行うアプリの回避策として、次のようにしました。
Apple がこのようなものを拒否した前例はありますか? 時間の制約があるため、彼らが何かを拒否する危険を冒すことはできません.
objective-c - [super viewDidLoad] と [super viewDidUnload] を呼び出すタイミングは?
ほとんどのコードでは、viewDidLoad と viewDidUnload を次のように設定しています。
しかし、私は疑問に思いました... viewDidLoad と viewDidUnload をいつ呼び出すかは問題ですか? それぞれが「何かをする」前または後にあるべきですか?
つまり、それぞれをメソッドの最初または最後に配置する必要がありますか?
編集:物事をさらに複雑にするために、これはAppleのデフォルトのviewDidUnloadメソッドであり、[super viewDidUnload]
最初に呼び出されることを示唆しているように見えます...
iphone - 次のコードでメモリリークはありますか?
プロパティとしてuibuttonがあり、deallocでリリースしています。非表示または再表示に使用しているだけですが、使用頻度が非常に高くなっています。
ios - ios5: ビューのアンロードを停止する / viewDidUnload の呼び出しを停止する
iOS6 がビューをアンロードしなくなったため、UIViewController
'sを呼び出さなくなったことを考えるとviewDidUnload
、iOS5 でこれと同じ動作を引き起こす信頼できる方法があるかどうか疑問に思っていましたか?
つまり、iOS 6 でビューをアンロードしなくなった理由について Apple が示したのとまったく同じ理由で、iOS5 でビューをアンロードするのを本当に止めたいと思います (これは、かなりの量のメモリを節約できなくなり、ほとんどの場合、余分なバグの原因)。iOS5 でのみ発生し、メモリが少ない場合にのみ発生する可能性のある多くのケースをテストするよりも、便利な機能の開発に時間を費やしたいと思います!
私は周りを検索しましたが、以前にこの質問をしたことがある人を見つけることができず、驚いています. self.view への余分な参照を保持するviewDidLoad
(および でのみ解放するdealloc
) のと同じくらい簡単でしょうか? 可能性のあるトラップはありますか?
ios5 - viewDidUnload は非推奨ですが、セカンダリ ビューへの強い参照はどうですか?
iOS6 では、このメソッドviewDidUnload
は非推奨になり、メモリ管理がUIViewController
. ここで、新しいパターンについて簡単に説明します。
ビュー コントローラーでより多くのメモリを占有する部分は、ビュー (そしてもちろん、最終的に作成する巨大なデータ) です。ビュー自体はそれほど多くのメモリを消費しません。バッキング ストアであり、描画される部分です (最も興味深いのは ですCABackingStore
)。この新しいパターンは、ウィンドウに表示されないビュー コントローラーのビューが所有するすべてのバッキング ストアが占有するメモリを揮発性としてチェックするようです。メモリ警告が発生すると、このバッキング ストアはメモリから消去されます。この方法を使用すると、非常にコストのかかるビューを再作成するプロセスを節約できます。
Apple は、viewDidUnload/viewWillUnload を iOS5 プロジェクトから削除しても安全であり、デプロイ ターゲットを iOS5 に設定しても、テンプレートにはこれらのメソッドが表示されないと述べています。ビューが所有するアウトレットが弱い場合、スーパークラスの実装でビュー コントローラーのビューを解放すると、ARC のおかげでリークやゾンビが発生することなく、すべてが正しく割り当て解除されることを理解しています。
私はこの新しいアプローチを本当に高く評価しているので、この種の状況には自信がありません: ビュー コントローラーとそのビューがあるとします。このビューは、ビュー コントローラーの xib で作成されたさまざまなビューをホストするコンテンツ ビューにすぎません。それらを実行時に動的に。このビューのアウトレットを作成すると、それらは自動的にストロングとして作成されます。これは、「メイン ビュー」がそれらを所有していないため意味があります。
新しいルールに関して、このビューのバッキング ストアは、iOS6 のメイン ビューによって所有されていないため、揮発性として署名されませviewDidUnLoad
ん。
どうすればこの状況を管理できますか? didReceiveMemoryWarning 内でそれらを解放するのは正しいでしょうか? ビューが一度だけロードされる場合、iOS6でそれらを再作成できますか?
ios - Cordova iOS カスタム プラグイン: メモリ警告の処理
cordova(2.1) といくつかのカスタム プラグインを使用する iOS アプリを開発しています。
私が直面しようとしている問題は次のとおりです: プラグイン (基本的には、組み込みのコルドバ プラグインよりも多くの機能を備えたカメラ プラグイン) を表示すると、メモリ警告が表示され、その結果、webview を含むビューがアンロードされることがあります。 . imagePicker が閉じられると webview が復元されないため、これは私にとって非常に大きな問題です。
CDVCamera プラグインのソースを調べたところ、次のことがわかりました。
(1) プラグインは webview を保存します:
ここで何が起こっているのかわかりません。メモリ警告の後にアンロードされる場合に備えて、webview を保存しますが、フレームワークのどこで webview がどのように/どこで復元されるかわかりません。
(2) プラグインは hasPendingOperation と呼ばれる Bool プロパティを使用します。このプロパティは、プラグインがアクティブな場合にメモリのパージを回避するために、メモリ警告が受信されたときに CDVViewController によって使用されることを理解しています。
私が理解していない最初のことは、私のコントローラーがメモリ警告を受け取ったときにスーパーコントローラー(CDVViecontroller)がそれを受け取らないのはなぜですか?
次に、カスタム プラグインでメモリ警告を処理するために、CDVViewController と組み合わせて CDVCamera プラグインで使用されるパターンを適用することは可能ですか?
WebView がアンロードされるのを避けるために、cordova でメモリ警告を管理するのに役立ちます。
ios - iOS6.0でリソースをリリースする方法
iOS 6.0では、viewDidUnload:およびその他のメソッドは非推奨になりました。UIWebViewやネットワーク接続などのリソースを解放する必要がある場合、どの方法を使用する必要がありますか?(ARCが含まれている場合)ありがとうございます。
automatic-ref-counting - self.viewを指す保持されたプロパティを解放します
ARCを使用した場合のUIViewController
ベストプラクティスは、のメインビュー(例self.myOutlet = nil
)の保持されたサブビューを「解放」することです。この時点では、厳密には必要ない- viewDidUnload
と思います。self.view = nil
追加のretain
edプロパティが定義され、次のように割り当てられた場合の対処方法...
self.anotherProperty = self.view;
また
_anotherProperty = self.view; //「_anotherProperty」がivarであると仮定
...self.anotherProperty = nil
それでは必要ですか?
ios - タブバーを使用した didReceiveMemoryWarning
UITabBar
保有してい3 UIViewControllers
ます。1 つはマップ、もう 1 つはテーブル、3 番目は独自のカスタム コントローラーです。最近、メモリ不足での動作に関して、アプリにいくつかの問題があることに気付きましたdidReceiveMemoryWarning
。
通常、十分なメモリがあれば、すべての機能が優れています。すべてのコントローラーを に割り当てるapplicationDidFinishLaunchingWithOptions
と、すべてのコントローラーがうまく機能します。
しかし、メモリが少し少ない場合に何が起こるかというと、(何らかの理由で) 私のテーブルだけが正しく動作していないということです。まず、アプリがメモリ警告を受け取ったことがわかります。そして、私のテーブルだけがviewDidUnload
. 最初は、テーブルが になった理由がわかりませんでし*completely empty*
たが、委譲メソッドが機能しなくなり、reloadData
本質的に無意味になっていることに気付きました。
これで、didReceiveMemoryWarning
がすべての viewController をカスケードしていることがわかります。しかし、viewDidUnload は私のテーブルでのみ呼び出されます。
何が起こっているのか知りたいですか?
- viewDidUnload から回復するにはどうすればよいですか? 私の見解がゼロの場合、それを取り戻す責任は誰にありますか? 私のテーブルだけがviewDidUnloadを取得しているのはなぜですか? このリンクとそのリンク、およびいくつかのリンゴのドキュメントを読んでいましたが、ビューが回復しない理由についての説明が見つかりませんでした。
この場合、私は何をすべきですか?