問題タブ [weak]
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 - の違いは何ですか? と !Swift の弱参照、強参照
私はSwiftの初心者です。解決しなければならない問題がいくつかありますが、自分では解決できません。
ここに私にとっていくつかの問題があります:
これはうまくコンパイルされます:
- では、何が違うのか説明してもらえますか? と !
authorObj!.book?.author = authorObj
とauthorObj!.book!.author = authorObj
? _
さらに 2 つの質問があります。
authorObj
は と同じ強参照ですがauthorObj.book.author
、それも強参照ですか? varを持っていないweak
か、前に持っていないためです。unowned
authorObj.book
弱参照のみです。しかし、authorObj
nil に割り当てると、すべて deinit されます。なんで?authorObj
nilにのみ割り当てますが、Author()
インスタンスにはまだ 1 つの強力な参照がありますauthorObj.book.author
c++ - テンプレートの特殊化はリリース バージョンとデバッグ バージョンが異なります。これは gcc のバグですか?
まず、クラスのヘッダー ファイル、定義のない特殊化宣言 (インターネットからのコード サンプル) を取得しました。
$ 猫 foo.h
次に、テンプレートの特殊化のための 2 つの実装ファイルがあります
最後に、メインファイルを取得しました
最適化せずにコンパイルして実行すると、次のようになります。
g++ foo_int.cpp foo_float.cpp main.cpp && a.out
init int foo
init float foo
最適化を追加すると、結果は異なります。
$ g++ foo_int.cpp foo_float.cpp main.cpp -O2 && a.out
init int foo
結果は異なります。インターネットからの説明によると、これはgcc実装の「弱いシンボル」の内部メカニズムによるものですが、私の質問:
「弱いシンボル」/「強いシンボル」は gcc/g++ の概念ですか、それとも c/c++ 言語仕様の一部です。
デバッグとリリースの結果が異なる場合、これは「弱いシンボル」メカニズムに関する gcc/g++ のバグ/問題であると言えますか? 開発者として、私のデバッグ バージョンがリリース バージョンと異なる動作をするとは思いません。
残念ながら同じエラーが発生しました。これは、C/C++ のデバッグ/リリースの動作が「そうであるべき」「受け入れられる」ケースですか?
javascript - GC を妨げずに、WeakMap 値オブジェクトからキー オブジェクトに参照を保存できますか?
GC はオブジェクト グラフの孤立した島を検出してメモリから削除する候補を見つけ、WeakMap は弱い参照で島の境界を壊さないWeakMap -> KeyObject
ため、この参照WeakMap -> Value -> KeyObject
が弱いWeakMap -> Value
参照で島の境界を壊さないことは理にかなっていますが、Value -> KeyObject
参照は明らかに強いです。
例:
c - 変数宣言の GCC の弱い属性
GCC では、変数がweak属性で宣言され、(静的) リンク時に定義が見つからない場合、変数のアドレスは0になります。つまり、ポインターが変数のアドレスで初期化される場合、ポインターは次のコード スニペットが示すように、NULLである必要があります。
foobar.c :
main.c :
出力は次のとおりです: 0, 0x20000120 (私は arm-none-eabi-gcc 5.4.1 を使用しています)
問題は、この動作は予期されたものであるにもかかわらず、それについて言及されたドキュメントがないということです。この動作を説明する資料を誰かに教えてもらえますか? ありがとう!
swift - Swift ジェネリック参照型
ジェネリック型の要件を参照型だけに制限しようとして問題が発生しています。コード例を次に示します。
一般的な要件を に変更すると<Element: class>
、エラーが発生しますclass constraint can only appear on protocol declarations
。
これはジェネリックの制限ですか?プロトコルをクラスとしてマークするだけで、そのプロトコルへの弱い参照を持つことができますが、ジェネリックには同等のものはありませんか?
swift - Swift XCTest: 弱い変数の適切な割り当て解除を検証する
最近、単体テストを使用して、作成したオブジェクトが適切に割り当て解除されることを確認しようとしていました。ただし、何を試しても、テストが完了する前にオブジェクトの割り当てが解除されないことがわかりました。そこで、弱い変数を使用してオブジェクトの割り当て解除の基本を証明しようとする単純な例 (以下を参照) にテストを縮小しました。
私の考えでは、テストメソッドが終了した後、強参照はオブジェクトの保持を停止する必要があり、弱参照は次の実行ループで参照されるときに nil にする必要があります。ただし、弱参照が nil になることはなく、両方のテストが失敗します。ここで何か誤解していますか?以下は完全な単体テストです。
何らかの理由で XCTest によって割り当て解除が延期されているのではないかと考えましたが、テスト メソッド本体を でラップしてもautoreleasepool
、オブジェクトの割り当て解除は発生しませんでした。
ios - 値の型の不一致を迅速に割り当てることができません
次のコード スニペットがあります。
これは以前は Swift 2 で正常に機能していましたが、現在は次のエラー メッセージが表示されます。
タイプ '(LLSimpleCamera!, AVCaptureDevice!) -> Void' の値をタイプ '((LLSimpleCamera?, AVCaptureDevice?) -> Void)!' に割り当てることはできません
これを変更する方法がよくわからないので、 ! を変更してタイプを一致させてみました。オプションに追加してから ! ボイドの後、しかし、これはうまくいきませんでした。