問題タブ [deinit]
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.
swift - UIView がメモリから削除されたときに迅速な deinit メソッドが機能しない
Swift
ARCでは、いずれかがメモリから削除されているときに呼び出してdeinit
いますが、メモリから削除されたUIViewController
場合は呼び出されませんUIView
。
例えば
UIViewController
クラスdeinit
がうまく機能している場合
ただし、UIView
クラスが機能しdeinit
ない場合
何か案が 。
swift - アンワインド後に AVPlayerViewController の割り当てが解除されない
私の tvOS アプリには、ショー セグエを介して提示される AVPlayerViewController があります。これは、警告を表示し、ビデオが見つからない場合は前のビューに戻ります。アラート コントローラーを作成して提示し、アラート アクション ハンドラーでアンワインド セグエを呼び出します。すべてが期待どおりに動作しているように見えますが、巻き戻されたビュー コントローラーの割り当てが解除されていないことがわかりました。
アンワインドを呼び出さずにメニューボタンを手動で押して戻ると、問題なく割り当てが解除されるため、アンワインドセグエに関する何かがプレーヤーの割り当て解除を許可していないことがわかりました。また、アンワインド セグエを次のように置き換えてみましたdismissViewControllerAnimated
が、プレーヤーを却下したように見えますが、まだ解放されていません。
ios - View Controller が deinit されたときにネットワーク呼び出しを行うのは安全ですか?
基本的に、チャットルームを制御する UIViewController があります。UIViewController が何らかの方法で定義された場合、現在のユーザーはチャネルを離れる必要があります。
現在、私のコードは次のとおりです。
私は deinit のようなコードしか見たNSNotificationCenter.defaultCenter().removeObserver(self)
ことがなく、これが安全かどうかについてオンラインで何も見つけていません。
本質的に、このView ControllerはUINavigationControllerスタックの一部であり、View Controllerがポップされるたびに(deinitが常に呼び出されると思います)、ユーザーにチャネルを離れてもらいます。ナビゲーション バーの左上の戻るボタンとパン ジェスチャを処理するための好ましい方法がある場合は、実装を確認したいと思います。
ios - Swiftでdeinitをオーバーライドすることは可能ですか?
別のクラスからサブクラスを作成する場合override
、関数に必要ですが、 「関数」init()
をオーバーライドすることはできません。deinit
これはSwiftで可能ですか?
ここに例があります
サンプルビューコントローラーの内部
出力
拡張に関する私の元の質問に追加するにはdeinit
:
コード例では、オーバーライドによってスーパークラスの関数がinit()
呼び出されるようです。init()
これは何が起こっているのですか?
Bar
インスタンスが初期化解除されると、同じ動作が発生します。これもここで起こっていることですか?
ios - Swift 3 TableViewController が deinit しない
My Swift 3 iOS アプリは、3 つの ChildView を持つ TabBarController に続く LoginViewController で始まります。それぞれは、ViewController の rootView である NavigationController です。
1 つの ViewController には Logout Button が含まれており、これは LoginViewController に対して unwindSegue を実行します。
もう 1 つ (これは重要です) には 2 つのコンテナー ビューがあり、そのうちの 1 つは TableViewController です。TableViewController には、バックエンドからのデータが動的に入力されます。
バックエンドから 0 データが返された場合、すべて正常に動作します。ログアウト ボタンとすべての ViewController、および ContainerViews と TableView を押すと、deinit() が正しく取得されます。
TableViewController がバックエンドからデータを取得してセルを表示するとすぐに、 TableViewController に対して deinit() を呼び出さなくなります。
原因は何ですか?リクエストに応じてコードを共有できます。
私がこれまで に試したこと: クロージャーが存在するすべての場所で、所有されていない自己を使用しようとしました。@escaping を使用してデータを取得するこの部分については、よくわかりません。
どんな助けにも感謝します!