問題タブ [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.
ios - SpriteKit で別の SKScene に遷移した後に SKScene の割り当てを解除する
子として 3 つの skscenes を持つビュー コントローラーがあります。
あるシーンから別のシーンに移行すると、古い skscene の割り当てが解除されません。
あたかもそこになかったかのように割り当てを解除したいのです。
例:
最初にアプリをロードしたとき、1 つの skscene だけが表示され (100 MB のメモリを消費するとします)、別の skscene (100 mb 以上) に移行し、3 つ目 (300 mb のメモリ) に移行します。
最終的に 300MB のメモリが必要になるため、常に 100MB を保持したいと考えています。
どうすればこれを達成できますか?
swift - オプションのインスタンスを nil に設定すると deinit が呼び出されますか (実装されている場合)?
これはクレイジーな質問かもしれませんが、今週私を悩ませていたものです. Swift では、クラスのオプションのインスタンスがある場合、そのオプションを nil コール deinit (実装されている場合) に設定するか、インスタンスでクリーンアップを行いますか?
ポインターを nil に設定した後、Planet の特定のインスタンスにアクセスできなくなったと思いますか?
swift - Deinit が呼び出されたことがない
ViewController オブジェクトを作成して、それをナビゲーション コントローラーにプッシュしています。オブジェクトがスタックからポップされているとき - オブジェクトは解放されておらず、Deinit は呼び出されていません。その理由は何ですか?
プッシュするコードは次のとおりです。
そして、ポップするコードは次のとおりです。
swift - Swift メソッド: deinit は呼び出されません
Apple による Swift Programming Book のコード例を次に示します (章: Deinitializers)
deinit メソッドが呼び出されていないようです。なんで?
class - これらの迅速なオブジェクトが初期化解除されないのはなぜですか?
私は Swift 言語リファレンスを調べており、弱い参照と所有されていない参照がどのように実装されているかを理解しようとしています。以下のコード スニペットは本に含まれていますが、初期化子にも println() ステートメントを追加しました。実行すると、オブジェクトが初期化されたという確認が得られますが、初期化は解除されません。
私のコンソール出力は次のとおりです。
つまり、オブジェクトは初期化されていますが、初期化は解除されていません。Swift が参照を保持し、オブジェクトを破棄させないのはなぜですか?
swift - 子オブジェクトは、親の deinit 中にその親を参照できますか?
親クラスと子クラスがあります。親には子への強い参照があり、子には親への所有されていない参照があります。親のdeinit中に、子にクリーンアップをしてもらいたいのですが、それには親の呼び出しが含まれます。
残念ながら、doStuff()
親の deinit 中に呼び出すと、以下を使用するため、クラッシュが発生しますself.parent
。
私の知る限り、親の deinit がまだ完了していないため、親はまだ存在するはずです。unowned
それでも、このエラーは、子が親への参照にアクセスできなくなったことを示唆しているようです。
誰でもこれに光を当てることができますか?
ios - iOS ストーリーボード セグエを使用したアドホック ナビゲーション
Main、List、およびRunの3つのView Controllerがあります。(後でさらに追加されます。) 絵コンテとセグエを使用しています。対象OSはiOS8です。メインは初期シーン/コントローラーです。現在、ナビゲーションコントローラーは使用していません。
メインのボタンは、ショー セグエを介してリストを表示します。ユーザーの操作に応じて、List は unwind セグエを使用して Main に戻るか、プログラムで performSegueWithIdentifier を介して show セグエを使用して Run によってオーバーレイされる場合があります。ここまでは順調ですね。
List が Run にセグエされると、list は二度と使用されなくなります。Run は List に巻き戻されることはありません。
ユーザーが実行中の場合、アンワインド セグエが起動され、ユーザーはメインに戻ります。問題は、List が非アクティブ化されないことです。(Swift では、List.deinit() は呼び出されません。) List から Run へのセグエの前に、List へのすべてのポインター (デリゲートを含む) を nil にするように注意しています。List が Run を提示せずに Main に直接巻き戻される場合、List は本来あるべきように割り当て解除されます。
では、List-to-Run の後に Run-to-Main セグエが続き、List の割り当てが解除されるのを防ぐために、私は何をしているのでしょうか?
ナビゲーション バーは必要ないため (非表示にできることはわかっています)、Run にセグエできる VC は List だけではないため、ナビゲーション コントローラーを使用していないことに注意してください。他にもいくつかあるでしょう。
swift - NSTimer is Swift を使用すると、'deinit' が呼び出されない
NSTimer を使用した後、クラスの deinit メソッドが呼び出されることはありません。クラスは Swift で書かれており、次のように「init」でタイマーを呼び出します。
ローカル変数としても使用してみNSTimer
ましたが、成功しませんでした...この問題に直面している人はいますか? クラスの割り当てが解除されない原因とならない Swift で使用できるタイマーはありますか? ありがとう