問題タブ [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.

0 投票する
1 に答える
346 参照

ios - ios UIViewControllerがviewDidUnloadを呼び出さない

メモリ警告をシミュレートするときは、未使用のオブジェクトでviewDidUnload実行する必要がありますよね?

UIView が消えない理由を理解するにはどうすればよいですか?

参考までに、私はARCを使用しており、everyivarは次のIBOutletようになります。

0 投票する
2 に答える
288 参照

iphone - viewDidUnload の適切な使用

以前にも同様の質問があったことは承知しています。しかし、私はしばらくの間 S​​O を検索してきましたが、まだ少し混乱しています。だからここに行きます...

私はARCを使用していません。以下のようなインスタンス変数とプロパティを持つビューコントローラーがあるとします。

ViewController.h:

ViewController.m:

これはviewDidUnloadを実装する正しい方法ですか? someDict = nil を設定するとリークするため間違っているように思われるため、私の推測ではリリースです。保持されていないため、同じことが someOtherView にも当てはまりますか?

私はここで間違っていますか?助けてくれてありがとう!

0 投票する
2 に答える
219 参照

objective-c - ビューコントローラのviewDidUnloadに何かを入れても効果はありません

UIViewController方法があり-(void)viewDidUnloadます。ビューがアンロードされるタイミングを確認するためにそこに入れてみNSLog("unloaded");ましたが、コンソールに何も出力されませんでした。

ビューがアンロードされる前にアクションを実行できるように、コードをどこに配置しますか?

0 投票する
1 に答える
1546 参照

iphone - ARC の使用時にオブジェクトを nil に設定すると?

を使用してiPhoneプロジェクトを行ってARCいます。アプリケーションは、 を使用したナビゲーション ベースのアプリケーションですUINavigationController

典型的な使用例は、「メイン」UIViewControllerから「セカンダリ」にUIViewController複数回、おそらく最大 100 回移動することです。セカンダリ コントローラーには、多くの静的なローカル PNG 画像があり、一部は繰り返されます。

アプリケーションのプロファイリングを行っていますが、「メイン」コントローラーから「セカンダリ」コントローラーに移動すると、約 0.8 MB が割り当てられますが、[戻る] ボタンを押してもメモリが解放されないことがわかります。そのため、セカンダリ コントローラに再び移動すると、他の 0.8 MB が割り当てられます...

viewDidUnload:デバッグ中に、セカンダリのメソッドが呼び出されていないことに気付きUIViewControllerましたが、コントローラーによって保持されている参照を nil に設定する必要があるのはそのメソッドであることも読みました。viewDidDisappear:戻るボタンを押したとき、つまりスタックからコントローラーをポップしたときにのみ発生させたいため、これは役に立ちません (メソッドviewDidDisappear:は、スタック上の別のコントローラーをプッシュするときにも呼び出されます)。

質問は次のとおりです。それをしなければならない場所はありますか?そのメソッドを強制的に呼び出すことはできますか? その動作は問題ありませんか (プロファイリング、"main" -> "secondary" -> "main" -> "secondary" -> ...) のいくつかのサイクルの後、割り当ては 20MB に達しました ??

よろしくお願いします

0 投票する
2 に答える
930 参照

objective-c - UIPopoverController の contentViewController.viewDidUnload が呼び出されない

を使用しUIPopoverControllerて contentViewController を指定すると、contentViewController の割り当てを正しく解除できないようです (contentViewController.viewDidUnload が呼び出されないという事実から明らかなように)。

ポップアップを作成して表示するコード:

contentViewControllerここで、 (上記のコードでは、これはPopoverTestViewController)が閉じられたときに割り当てを解除する必要があると想定していますUIPopoverController(クリックしてオフにするか、明示的に閉じるか)。しかし、viewDidUnload呼び出されることはありません。ただし、 の dealloc メソッドを定義するPopoverTestViewControllerと、適切に呼び出されることに気付きました。

だから私の質問は:viewDidUnloadが呼び出されないのはなぜですか? (そして私はARCを使用しています)。

0 投票する
1 に答える
971 参照

ios - viewDidUnload で子ビュー コントローラに nil を設定する

私の iOS アプリは、次の構造のナビゲーション ベースです。

viewControllerBがそれらをプッシュする前にviewControllerCインスタンス化されます。ViewControllerAnavigationController

私の理解では、保持されているものはすべてViewControllerAnil in に設定する必要がありViewControllerAますviewDidUnload。子View Controllerにも同じことをする必要がありますか? このような:

から開始された「受信メモリ警告」があったときに問題を発見しましたviewControllerC。その後、viewDidUnload親ビュー コントローラ (つまりviewControllerA) が呼び出され、nil が「viewControllerB」に設定されました。意外にも、viewControllerB の viewDidUnload も呼び出されます。そのため、 nil を のサブビュー ( 内) に設定すると、「割り当て解除されたオブジェクトにメッセージが送信されました」というメッセージが表示されましviewControllerBた。viewControllerBviewDidUnload

nil を子ビュー コントローラーに設定してはならないということですか? この状況でのメモリ管理のベスト プラクティスは何ですか?

PS私はARCを使用しています。

0 投票する
3 に答える
1034 参照

ios - viewDidUnload は、xib ファイルのない alloc/init 初期化されたビューコントローラーに対して呼び出されませんでした

シミュレーターを介して iOS バージョンのメモリ警告をシミュレートするときにviewDidUnload、xib を使用せずに alloc/init を使用して初期化すると、メソッドが呼び出されないのはなぜですか? ViewControllerこのメソッドは呼び出されないようです。

xib ファイルを使用して alloc/initWithNibName 経由でコントローラーを作成すると、viewDidUnload メソッドが正常に呼び出されました。なぜそれが起こったのですか?すべてのviewcontrollersがメモリ警告を正常に処理するには、xibファイルが必要ですか?

0 投票する
1 に答える
139 参照

viewdidload - [super viewDidLoad]と書くべきですか?

私はナビゲーションベースのアプリを書いています。[super viewDidLoad];(モーダル セグエもあります)通話を続けるべきかどうかわかりません。このコード行の後または前にコードを書くべきですか? と類似品はどう[super viewDidUnload];ですか?

0 投票する
2 に答える
1281 参照

objective-c - didReceiveMemoryWarning クラッシュ

-ARCの使用

-UIViewControllerをサブクラス化する「UIViewControllerWithLoadingView」と呼ばれる、作成したクラスをすべてサブクラス化する5つの個別のView Controllerがあります。

-サブクラスとスーパークラスの両方で、次のようにプロパティを割り当ておよび割り当て解除します。

- didReceiveMemoryWarning が呼び出されると、サブクラスの viewDidUnload メソッドが正常に動作するようになりました。BBBUUTTT スーパー クラス UIViewControllerWithLoadingView でプロパティを nil に設定すると、アプリケーションがクラッシュします。特に、サブクラスのプロパティを nil に設定した場所です。そのため、現時点では、スーパークラスでプロパティを nil に設定していません。これは、実行時にライブ バイトが積み重なっていくため、問題になります。

0 投票する
1 に答える
362 参照

ios - UIStoryboardSegue で初期化された UIViewController への popViewController

performSegueWithIdentifier選択した項目の detailViewController をロードするためにを起動するリスト コントローラがあります。prepareForSeguedetailViewController を初期化するために、detailView が表示される前に呼び出されるプロパティを設定します。これはすべてうまくいきます。

ただし...
詳細ビューから、メモリを集中的に使用するアクションを実行するコントローラーに移動すると、detailViewController がアンロードされてviewDidUnload呼び出されます。

ここで、ユーザーがタイトル バーの [戻る] ボタンを押すと、起動しますpopViewControllerviewDidLoaddetailViewController のメソッドが再び実行されるとき、表示される前に適切なプロパティを設定する機会がありませんでした。したがって、この時点で、適切な情報を表示するコントロールはありません。

割り当てが解除され、ユーザーがそこに戻ると、detailViewController のプロパティを再初期化する最良の方法は何ですか? この状況で使用する AppDelegate に「selectedItem」を設定することを考えましたが、それはハックのようです。

前もって感謝します!