問題タブ [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.
ios - ios UIViewControllerがviewDidUnloadを呼び出さない
メモリ警告をシミュレートするときは、未使用のオブジェクトでviewDidUnload
実行する必要がありますよね?
UIView が消えない理由を理解するにはどうすればよいですか?
参考までに、私はARCを使用しており、everyivar
は次のIBOutlet
ようになります。
iphone - viewDidUnload の適切な使用
以前にも同様の質問があったことは承知しています。しかし、私はしばらくの間 SO を検索してきましたが、まだ少し混乱しています。だからここに行きます...
私はARCを使用していません。以下のようなインスタンス変数とプロパティを持つビューコントローラーがあるとします。
ViewController.h:
ViewController.m:
これはviewDidUnloadを実装する正しい方法ですか? someDict = nil を設定するとリークするため間違っているように思われるため、私の推測ではリリースです。保持されていないため、同じことが someOtherView にも当てはまりますか?
私はここで間違っていますか?助けてくれてありがとう!
objective-c - ビューコントローラのviewDidUnloadに何かを入れても効果はありません
UIViewController
方法があり-(void)viewDidUnload
ます。ビューがアンロードされるタイミングを確認するためにそこに入れてみNSLog("unloaded");
ましたが、コンソールに何も出力されませんでした。
ビューがアンロードされる前にアクションを実行できるように、コードをどこに配置しますか?
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 に達しました ??
よろしくお願いします
objective-c - UIPopoverController の contentViewController.viewDidUnload が呼び出されない
を使用しUIPopoverController
て contentViewController を指定すると、contentViewController の割り当てを正しく解除できないようです (contentViewController.viewDidUnload が呼び出されないという事実から明らかなように)。
ポップアップを作成して表示するコード:
contentViewController
ここで、 (上記のコードでは、これはPopoverTestViewController
)が閉じられたときに割り当てを解除する必要があると想定していますUIPopoverController
(クリックしてオフにするか、明示的に閉じるか)。しかし、viewDidUnload
呼び出されることはありません。ただし、 の dealloc メソッドを定義するPopoverTestViewController
と、適切に呼び出されることに気付きました。
だから私の質問は:viewDidUnload
が呼び出されないのはなぜですか? (そして私はARCを使用しています)。
ios - viewDidUnload で子ビュー コントローラに nil を設定する
私の iOS アプリは、次の構造のナビゲーション ベースです。
viewControllerB
がそれらをプッシュする前にviewControllerC
インスタンス化されます。ViewControllerA
navigationController
私の理解では、保持されているものはすべてViewControllerA
nil in に設定する必要がありViewControllerA
ますviewDidUnload
。子View Controllerにも同じことをする必要がありますか? このような:
から開始された「受信メモリ警告」があったときに問題を発見しましたviewControllerC
。その後、viewDidUnload
親ビュー コントローラ (つまりviewControllerA
) が呼び出され、nil が「viewControllerB」に設定されました。意外にも、viewControllerB の viewDidUnload も呼び出されます。そのため、 nil を のサブビュー ( 内) に設定すると、「割り当て解除されたオブジェクトにメッセージが送信されました」というメッセージが表示されましviewControllerB
た。viewControllerB
viewDidUnload
nil を子ビュー コントローラーに設定してはならないということですか? この状況でのメモリ管理のベスト プラクティスは何ですか?
PS私はARCを使用しています。
ios - viewDidUnload は、xib ファイルのない alloc/init 初期化されたビューコントローラーに対して呼び出されませんでした
シミュレーターを介して iOS バージョンのメモリ警告をシミュレートするときにviewDidUnload
、xib を使用せずに alloc/init を使用して初期化すると、メソッドが呼び出されないのはなぜですか? ViewController
このメソッドは呼び出されないようです。
xib ファイルを使用して alloc/initWithNibName 経由でコントローラーを作成すると、viewDidUnload メソッドが正常に呼び出されました。なぜそれが起こったのですか?すべてのviewcontrollersがメモリ警告を正常に処理するには、xibファイルが必要ですか?
viewdidload - [super viewDidLoad]と書くべきですか?
私はナビゲーションベースのアプリを書いています。[super viewDidLoad];
(モーダル セグエもあります)通話を続けるべきかどうかわかりません。このコード行の後または前にコードを書くべきですか? と類似品はどう[super viewDidUnload];
ですか?
objective-c - didReceiveMemoryWarning クラッシュ
-ARCの使用
-UIViewControllerをサブクラス化する「UIViewControllerWithLoadingView」と呼ばれる、作成したクラスをすべてサブクラス化する5つの個別のView Controllerがあります。
-サブクラスとスーパークラスの両方で、次のようにプロパティを割り当ておよび割り当て解除します。
- didReceiveMemoryWarning が呼び出されると、サブクラスの viewDidUnload メソッドが正常に動作するようになりました。BBBUUTTT スーパー クラス UIViewControllerWithLoadingView でプロパティを nil に設定すると、アプリケーションがクラッシュします。特に、サブクラスのプロパティを nil に設定した場所です。そのため、現時点では、スーパークラスでプロパティを nil に設定していません。これは、実行時にライブ バイトが積み重なっていくため、問題になります。
ios - UIStoryboardSegue で初期化された UIViewController への popViewController
performSegueWithIdentifier
選択した項目の detailViewController をロードするためにを起動するリスト コントローラがあります。prepareForSegue
detailViewController を初期化するために、detailView が表示される前に呼び出されるプロパティを設定します。これはすべてうまくいきます。
ただし...
詳細ビューから、メモリを集中的に使用するアクションを実行するコントローラーに移動すると、detailViewController がアンロードされてviewDidUnload
呼び出されます。
ここで、ユーザーがタイトル バーの [戻る] ボタンを押すと、起動しますpopViewController
。viewDidLoad
detailViewController のメソッドが再び実行されるとき、表示される前に適切なプロパティを設定する機会がありませんでした。したがって、この時点で、適切な情報を表示するコントロールはありません。
割り当てが解除され、ユーザーがそこに戻ると、detailViewController のプロパティを再初期化する最良の方法は何ですか? この状況で使用する AppDelegate に「selectedItem」を設定することを考えましたが、それはハックのようです。
前もって感謝します!